PostGIS를 사용하여 MultiLinestring을 Linestring으로 변환합니까?


16

여러 줄 문자열이 있고 줄 문자열에서만 작동하는 일부 함수를 사용하기 위해 줄 문자열로 변환하려고합니다. 나는 ST_Dump()기하학을 사용 하고 수집했다. 다시 병합하면 여러 줄 문자열이 계속 표시됩니다. 간단한 선 스트링으로 끝내려면 Npoints를 가져 와서 서로 결합해야합니까? ST_LineMerge()또한 여러 줄 문자열에서 작동하지 않으며 동일하게 반환됩니다.

내 예는

다중 선 ((- 55.9269166007097 3.16420835153456, -3.164222 55.926918), (- 3.1642070167833 55.9269296196706, -3.16421351659546 55.9268662214904), (- 55.9268662214904 3.16421351659546, -3.16421636372824 55.9268384509897), (- 55.9268384509897 3.16421636372824, -3.16422182573761 55.9267851753802), (- 55.9267851753802 3.16422182573761, -3.16422870102352 55.926718114886 ) (- 3.16422870102352 55.926718114886, -3.16423309121073 55.926675293667), (- 3.16423309121073 55.926675293667, -3.16423565148822 55.9266503211093), (- 55.9266503211093 3.16423565148822, -3.16424103159897 55.9265978443265), (- 55.9265978443265 3.16424103159897, -3.16424680776317 55.9265415044985), (- 55.9265415044985 3.16424680776317, 55.9264843002995 -3.16425267254583 ), (-3.16425267254583 55.9264843002995, -3.16425541048045 55.9264575949012), (-3.16425541048045 55.9264575949012, -3.16426111146586 55.9264019883556),(-3.16426111146586 55.9264019883556, -3.1642667032531 55.9263474469124), (- 3.1642667032531 55.9263474469124, -3.16426957768543 55.9263194101362), (- 55.9263194101362 3.16426957768543, -3.16427488261739 55.9262676666359), (- 55.9262676666359 3.16427488261739, -3.16428009893088 55.9262167875066), (- 55.9262167875066 3.16428009893088, -3.164282741107 55.9261910161221) (-3.1642875546472 55.9261440655823, -3.164282741107 55.9261910161221), (- 3.1642875546472 55.9261440655823, -3.16429466890915 55.9260746741522), (- 55.9260746741522 3.16429466890915, -3.16430092974527 55.9260136069079), (- 55.9260136069079 3.16430092974527, -3.16430822838418 55.9259424170929), (- 55.9259424170929 3.16430822838418, -3.16431547242401 55.925871759829) (-3.16431547242401 55.925871759829, -3.16431448732505 55.9258328901507), (-3.16431770120536 55.9257327846001, -3.16431547242401 55.925871759829), (-3.164339 55.925777, -3.16431770120536 55.9257327846001))


우리가 테스트 할 수 있도록 변환하려는 이러한 다중 줄 문자열의 예를 제공하십시오.
CaptDragon

답변:


6

ST_SnapToGrid 를 사용 하여 데이터를 고칠 수도 있지만 매개 변수를 사용하여 제대로 작동해야합니다.

SELECT ST_AsText(
    ST_LineMerge(
        ST_SnapToGrid(
            ST_GeomFromText('MULTILINESTRING((-3.16420835153456 55.9269166007097,-3.164222 55.926918),(-3.1642070167833 55.9269296196706,-3.16421351659546 55.9268662214904),(-3.16421351659546 55.9268662214904,-3.16421636372824 55.9268384509897),(-3.16421636372824 55.9268384509897,-3.16422182573761 55.9267851753802),(-3.16422182573761 55.9267851753802,-3.16422870102352 55.926718114886),(-3.16422870102352 55.926718114886,-3.16423309121073 55.926675293667),(-3.16423309121073 55.926675293667,-3.16423565148822 55.9266503211093),(-3.16423565148822 55.9266503211093,-3.16424103159897 55.9265978443265),(-3.16424103159897 55.9265978443265,-3.16424680776317 55.9265415044985),(-3.16424680776317 55.9265415044985,-3.16425267254583 55.9264843002995),(-3.16425267254583 55.9264843002995,-3.16425541048045 55.9264575949012),(-3.16425541048045 55.9264575949012,-3.16426111146586 55.9264019883556),(-3.16426111146586 55.9264019883556,-3.1642667032531 55.9263474469124),(-3.1642667032531 55.9263474469124,-3.16426957768543 55.9263194101362),(-3.16426957768543 55.9263194101362,-3.16427488261739 55.9262676666359),(-3.16427488261739 55.9262676666359,-3.16428009893088 55.9262167875066),(-3.16428009893088 55.9262167875066,-3.164282741107 55.9261910161221),(-3.1642875546472 55.9261440655823,-3.164282741107 55.9261910161221),(-3.1642875546472 55.9261440655823,-3.16429466890915 55.9260746741522),(-3.16429466890915 55.9260746741522,-3.16430092974527 55.9260136069079),(-3.16430092974527 55.9260136069079,-3.16430822838418 55.9259424170929),(-3.16430822838418 55.9259424170929,-3.16431547242401 55.925871759829),(-3.16431547242401 55.925871759829,-3.16431448732505 55.9258328901507),(-3.16431770120536 55.9257327846001,-3.16431547242401 55.925871759829),(-3.164339 55.925777,-3.16431770120536 55.9257327846001))'),
            0.001)
        )
    );

25

변환하려는 모든 MultiLine을 변환 할 수 있습니까?

단순 지오메트리는 자체 교차 또는 자체 탄젠트와 같은 비정상적인 지오메트리 포인트가없고 주로 0 또는 1 차원 지오메트리를 나타냅니다.

그렇지 않으면 ST_LineMerge작동해야합니다.

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-29 -27,-30 -29.7,-36 -31,-45 -33),(-45 -33,-46 -32))')));

최신 정보

이것이 여러분이 제공 한 멀티 라인 스트링입니다. 여기에서 유효 해 보입니다. :

여기에 이미지 설명을 입력하십시오

그러나 검사를 위해 가까이 확대하면 이것이 유효한 줄 문자열로 변환 될 수 없음을 분명히 알 수 있습니다 .

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

유효한:

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

유효하지 않은 :

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

그러나 포인트 의 올바른 하위 세트를 가져 가면 제대로 작동합니다.

SELECT ST_AsText(ST_LineMerge(ST_GeomFromText('MULTILINESTRING((-3.16422182573761 55.9267851753802,-3.16422870102352 55.926718114886),(-3.16422870102352 55.926718114886,-3.16423309121073 55.926675293667),(-3.16423309121073 55.926675293667,-3.16423565148822 55.9266503211093),(-3.16423565148822 55.9266503211093,-3.16424103159897 55.9265978443265),(-3.16424103159897 55.9265978443265,-3.16424680776317 55.9265415044985),(-3.16424680776317 55.9265415044985,-3.16425267254583 55.9264843002995),(-3.16425267254583 55.9264843002995,-3.16425541048045 55.9264575949012),(-3.16425541048045 55.9264575949012,-3.16426111146586 55.9264019883556),(-3.16426111146586 55.9264019883556,-3.1642667032531 55.9263474469124),(-3.1642667032531 55.9263474469124,-3.16426957768543 55.9263194101362),(-3.16426957768543 55.9263194101362,-3.16427488261739 55.9262676666359),(-3.16427488261739 55.9262676666359,-3.16428009893088 55.9262167875066))')));

이것은 실제로 정확하지 않습니다. 자체 교차가있는 줄 문자열은 여전히 ​​OGC 유효합니다. 원래 MultiLineString을 단일 LineString으로 변환 할 수없는 이유는 3 개의 분리 된 연결된 정점 세트를 포함하기 때문입니다.
dr_jts

@dr_jts 맞습니다. 따라서 LineString은 유효하지 않지만 입력은 유효하지 않습니다. 교차 선을 변환 할 수 없습니다. 따라서 유효한 선 스트링 입력은 교집합이없는 입력입니다.
CaptDragon 19

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.