인근 도로와 평행 도로 노선 (예 : 이중 차도)을 한 줄로 병합 / 접수하는 방법은 무엇입니까?


23

OSM의 shapefile에 도시 내의 모든 도로가 포함되어 있습니다. 이중 도로와 같이 큰 도로에는 2 개의 평행선이있는 것 같습니다. 외부 3D 응용 프로그램에서 내보내고 멋지게 렌더링 할 수 있도록 축소하고 결합하여 한 줄로 묶고 싶습니다 (2 개의 겹치는 도로가 복잡하고 3D에서는 이상하게 보일 것입니다).

QGIS 또는 PostGIS로 어떻게 이것을 달성 할 수 있습니까? 나는 약간의 정확도 손실 (몇 미터 이내)에 대해 걱정하지 않으며 결과 단일 라인이 현재 병렬 라인 사이 (이상적으로 중심)가되기를 바랍니다.

고맙습니다.

(여기에 결합하려는 이중 도로 노선의 예가 있습니다)

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

답변:


3

ESRI에는 센터 라인 도구로 접는 이중 캐리지가 있습니다. OSM과 함께 사용할 저렴한 버전을 얻을 수 있습니다. 그렇지 않으면 기능을 선택하고 새 레이어로 저장할 수 있습니다. 내보내기에 사용한 레이어에서 선택한 항목을 삭제합니다. 두 번째 차선을 포함하는 차도의 한 측면 범위 내의 버퍼 기능. shapefile을 원본과 병합하고 손상된 토폴로지를 연결하십시오.

코드 및 / 또는 스크립트를 작성할 수있는 경우 노드 일치를 기준으로 노드별로 레인 사이의 중심선을 평균화하고 중심선 프로그래밍 방식으로 출력 한 다음 생산 공정에 사용 된 선택된 기능을 프로그래밍 방식으로 삭제하고 손상된 토폴로지를 확인 및 수정하면됩니다. 끝난.

링크를 찾는 방법은 주석에서 아래에 나와 있습니다.

ESRI ARCGis의 도움 덕분에

# Name: CollapseDualLinesToCenterline_Example.py
# Description: Creates street centerlines from a street casing coverage.
# Requirements: ArcInfo Workstation

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inCover = "streets"
outCover = "C:/output/centerlines"
maximumWidth = 50

# Execute CollapseDualLinesToCenterline
arcpy.CollapseDualLinesToCenterline_arc(inCover, outCover, maximumWidth, "")

ESRI 접기 링크를 중앙선 도구로 연결 하시겠습니까? 찾을 수 없었습니다. 내가 찾을 수있는 유일한 것은 이 페이지 의 듀얼 캐리지 편집 섹션입니다 .
Fezter

는 ArcGIS 도움이 내가 그렇게 ...로 이동 참조하십시오 비기 링크로 전혀 참조하지 않는다 유니크 링크 생성 resources.arcgis.com/en/help/main/10.1/index.html 듀얼 라인 중심선 (범위)를 축소하고 검색을을 원래 링크는 토론에서 왔으며 ArcGIS for Desktop Advanced가 필요하므로 잘못되었을 수 있습니다. ArcInfo Workstation이 설치되어 있어야합니다.
lewis

1
Arc7 적용 범위 데이터로 명시 적으로 작업하지 않는 한 대부분의 사용자는 "Coverage"도구 (워크 스테이션이 필요함)를 사용하지 않아야합니다. 대신 대부분의 경우 이중선을 중심선으로 축소 (Cartography) 를 사용하십시오.
RyanDalton

2

Mike Migurski의 Skeletron을 사용해보십시오 . 지형지도 스타일과 같은 용도로 사용하는 오픈 소스 도구입니다.


1

어쩌면 그것은 매우 우아한 해결책이 아니며 /gis//a/295348/120129에 대한 답변 방법을 기반으로합니다 .

그것은 당신의 질문을 해결하는 변형 중 하나입니다. 지오 인스트루먼트를 설정하십시오 (나를 위해 11m 너비, 유형-라인 (MultiLineString)라는 이름의 도로),

geoinstrument를 실행하십시오 :-),

WITH 
      tbla AS (SELECT id, ((ST_DumpPoints(geom)).geom) geom FROM road_border),
      tblb AS (SELECT (ST_Buffer((ST_Dump(geom)).geom, 0.0001)) geom FROM tbla),
      tblc AS (SELECT ST_Centroid(ST_UnaryUnion(Unnest(ST_ClusterWithin(geom, 0.0001)))) geom FROM tblb),
      tbld AS (SELECT ((ST_Dump(ST_DelaunayTriangles(ST_Collect(geom)))).geom) geom FROM tblc),
      tble AS (SELECT (ST_Boundary(geom)) geom FROM ST_Dump((SELECT ST_Polygonize(geom) geom FROM (SELECT ST_Union(geom) geom FROM
      (SELECT ST_ExteriorRing(geom) geom FROM tbld) AS lines) AS foo))),
      tblf AS (SELECT ST_MakeLine(p1, p2) geom FROM (SELECT ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) p1,
      ST_PointN(geom, generate_series(2, ST_NPoints(geom))) p2 FROM tble) AS geom),
      tblj AS (SELECT ST_Buffer((ST_Dump(ST_Union(ST_Buffer(geom, 0.0005)))).geom, -0.0005) geom FROM road_border)
      SELECT ST_Intersection (a.geom, b.geom) geom FROM tblf a JOIN tblj b ON ST_Within (a.geom, b.geom);

결과를 참조하십시오.

모두에게 행운을 빕니다 :-),

독창적 인 솔루션 ...

이 스크립트를 ST_RoadAxisFromDelaunayTriangulation이라고합니다.

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