태그 보관물: dissolve

dissolve

PostGIS 또는 GRASS의 공통 속성에서 줄을 분리 또는 분리 하시겠습니까? 집합을 가진 LINESTRING을 단일

모든 교차점에서 도로가 분할되는 도로 중심선 모양 파일이 있습니다. 그러나 공통된 속성 집합을 가진 LINESTRING을 단일 LINESTRING에 결합하고 싶습니다. 이름, 제한 속도 등이 변경되지 않는 한 서로 병합하고 싶습니다. 이것은 결국 OpenStreetMap으로의 통합을위한 것입니다.

Esri의 ArcGIS for Desktop 소프트웨어는 Dissolve 명령과 UNSPLIT_LINES 옵션으로이를 허용하는 것으로 보입니다.

QGIS에서 Dissolve 명령도 찾았지만 다각형과 단일 필드에서만 작동하는 것 같습니다.

QGIS에 대해 아무것도 없다고 가정하면 누구나 PostGIS 또는 GRASS에서 어떻게해야하는지 알고 있습니까?



답변

흥미로운 질문입니다. 나는 나 자신을 PostGIS 전문가라고 생각하지 않지만 문제를 해결하고 여러 필드 (데이터 세트에서 and 필드 와 일치)에서 공통 값을 가질 때 고속도로 LINESTRING레코드를 MULTILINESTRING레코드 로 녹이는 다음 쿼리를 생각해 냈습니다 . OGR을 사용하여 고속도로 shapefile (ushwys로 재 명명)을 PostGREsql로 푸시했습니다. 내 지오메트리 필드는 입니다. 이 쿼리를 해킹하여 데이터 및 필드 조건을 수용하십시오.namestatewkb_geometry

SELECT 
u.name, 
u.state, 
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines 
FROM ushwys u
GROUP BY u.name, u.state 
ORDER BY u.state 
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING

이것이 작동하면 ogr2ogr을 사용하여이 쿼리를 수행하고 shapefile, GML, CSV 또는 기타와 같이 원하는 모든 벡터 형식으로 결과를 내보낼 수 있습니다. ogr2ogr에서 SQL 조회 호출에 대한 정보는 OGR SQL 문서를 확인하십시오 .

참고로 PostGIS ST_Collect 명령과 여러 필드의 그룹화를 보여주는 이 사이트 를 검토했습니다 .

이 검색어의 수정 사항이 효과가없는 경우 알려 주시면 답변을 드리겠습니다.


PS ogr2ogr을 사용하여 지리 데이터를 PostGIS에 푸시하는 것에 익숙하지 않은 경우, 다음 ogr2ogr 스크립트를 사용하여 데이터 가져 오기를 수행 했습니다 (웹에서 복사하고 ogr2ogr 명령 창에 직접 붙여 넣기를주의하십시오. ogr 스크립트를 중단하는 큰 따옴표에 대한 줄 바꿈 및 글꼴 / 문자 대체를 소개합니다 .

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" 
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry

[최신 정보]

해당 쿼리를 실행 한 후 QGIS에서 이것이 어떻게 “보기”를 원했기 때문에이 WHERE절 을 적용하도록 쿼리를 수정했습니다 .

where u.state = 'MO' and u.name LIKE '%US%65%'

다음으로 QGIS와 QuickWKT 플러그인을 사용하여 8 개의 고속도로 결과를 시각화했습니다 MULTILINESTRING. 스크린 샷에서 볼 수 있듯이 최종 결과는 미주이의 북부 국경에서 아이오와가있는 65 번 고속도로를 아칸소와의 남쪽 국경까지 가져옵니다.

나 에게이 시각화는 내 쿼리가 예기치 않은 기능 복제 또는 제거를 생성하지 않았다는 것을 보여줍니다. 다음으로 “확인, 디졸브가 8 개의 기능을 반환했지만, 원래 테이블에 몇 개의 기능이 실제로 미주리주의 Hwy 65를 나타 냅니까?” 다음 질문은 그 질문에 답했습니다. 원래 데이터 세트는 38 개의 기능을 사용하여 미주리 주에서 65 번 고속도로를 나타냅니다.

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

최종 분석에서 쿼리는 38 개의 기능을 이름 및 상태 필드의 값을 공유하는 8 개의 기능으로 줄였습니다. 이 시점에서이 쿼리가 디졸브 작업이 여러 필드를 고려해야 할 때 단일 파트 형상을 여러 파트 형상으로 분해하는 데 유용하고 적합하다는 것이 상대적으로 확신합니다.

건배. 🙂


답변

PostGIS에는 라인 병합을위한 전용 기능이 있습니다

ST_LineMerge-MULTILINESTRING을 함께 꿰매 서 형성된 (문자열) LineString을 반환합니다.

http://www.postgis.org/docs/ST_LineMerge.html