지도에서 도로 교차점을 효율적으로 감지하는 방법은 무엇입니까?


14

내 프로젝트의 모든 소스에서 맵을 수신 할 수 있으며 내가 만들고있는 C ++ 알고리즘의 경우 알고리즘이 도로 교차점 (두 개의 도로 세그먼트가 만나는 노드)이 어디에 있는지 알아야합니다. 게다가, 내가 얻는 많은지도들에는 도로 오버 슈팅과 언더 슈팅이 있습니다 (예 : 도로가 제대로 연결되지 않았습니다). 문제를 해결하는 한 가지 방법은 Autocad를 사용하여 도로 네트워크를 '청소'하는 것입니다. 내가 가진 질문은 다음과 같습니다.

  1. 지도의 도로 교차로에 대한 정보가 포함 된 GML 형식으로 내지도를 가져 오는 효율적인 방법 (가능한 소프트웨어가 있습니까?)이 있습니까? (특정 노드가 접합이라고 말하는 GML 태그가있을 수 있음)
  2. 도로 네트워크를 '청소'하는 다른 방법이 있습니까?

동료들이 FME를 제안했지만 스크립트 작성과 관련이 있으며 스크립트가 모든지도를 수용 할 수있을만큼 융통성이 있는지 확실하지 않습니다. 교차점을 감지하는 유일한 다른 방법은 무차별 대 입력을 사용하고 공통 도로가있는 도로 구간을 찾는 것입니다. ArcGIS가 도움이 될까요? (사용하지는 않았지만 들어 보았습니다) 더 좋은 방법이 있어야합니다.


2
자가 교차 도로를 찾아야합니까? 축퇴 형상 (모든 정점이 일치하여 길이가 0 인 폴리 라인)을 처리하는 방법 교차점이 점이 아닌 선형 선분 인 일치하는 선을 어떻게 처리해야합니까?
Kirk Kuykendall

@ Kirk : 당신이 언급 한 상황에 약간 충격을 받았습니다. 저는 GIS를 처음 접했고 그러한 가능성이 존재한다는 사실조차 몰랐습니다. 1. 자체 교차로에는 여러 개의 세그먼트가 필요합니다. 비행이 아니라면 교차로를 교차점으로 생각합니다. 2. 변형 된 지오메트리가 무엇인지 시각화 할 수 없어서 답을 모릅니다. 3. 접근 라인은 실제 도로에 있다고 가정하기 때문에 두 개의 별도 도로로 취급해야합니다.
Nav

답변:


9

Shapefile과 같은 공간 형태의 도로가있는 경우 PostGIS에로드하고 SQL 쿼리를 사용하여 도로를 자동으로 찾도록 할 수 있습니다. 이전에이 작업을 수행했습니다. SQL 문은 각 도로에서 지리적으로 교차하는 도로를 찾아 각 교차점에 대한 절점을 만들도록 설계되었습니다.

나는 이것을 나중에 정리하려고 노력할 것이지만, 여기 당신이 취할 수있는 기본 흐름이 있습니다 ...

for line in road_layer_lines:
    ilines = get_intersecting_objects(line)
    for iline in ilines:
        road_junctions.extend(get_intersection(line, iline))

ST_ * 함수는 PostGIS 내에서이 기능을 수행합니다.

  • ST_Envelope : 주어진 지오메트리의 경계 상자를 잡고 알고리즘 속도를 높이는 데 사용됩니다. 빠르고 정확한 패스로 경계 상자를 사용하여 지리적 검색 범위를 좁힌 다음 실제 형상으로 결과를 스캔 할 수 있습니다.
  • ST_Intersects : 두 기하학이 교차하는지 판별
  • ST_Intersection : 두 도형의 교차점을 반환

다음은 완료 할 시간이 없기 때문에 스 니펫입니다. 아마도 내가 여기로 돌아 오기 전에 편집 할 수 있습니다 ...

SELECT id, the_geom FROM road_lines
SELECT roads.id FROM road_lines roads WHERE ST_Intersects(roads.the_geom, my_geom)
SELECT ST_Intersection(roads.the_geom, my_geom) FROM road_lines roads WHERE roads.id = my_id

공유하기 : 내가 본 또 다른 데이터베이스는 < oracle.com/technetwork/database/berkeleydb/overview/index.html >입니다. 응용 프로그램에 포함 할 수있는 라이브러리로 쿼리를 사용할 수 있기 때문에 쿼리가 매우 빠릅니다.
Nav

1
@ dmsnell-이 작업을 수행하는 데 사용되는 SQL 쿼리 유형의 예를 제공 할 수 있습니까?
RyanKDalton

11

버퍼를 사용하여 놀라운 방법으로 폴리 라인을 분석 할 수 있습니다. 이는 일반적으로 비효율적이며 버퍼가 많은 추가 정점을 생성하지만 (a) 많은 GIS (벡터 또는 래스터 기반)에서 사용할 수있는 기술이며 (b) 때로는 얻기 어려운 정보를 생성 할 수 있습니다.

이 경우, 소량으로 도로를 완충 한 다음 동일한 양의 음수로 완충하면 모든 굽힘 모든 교차점 주위에 작은 "섬"이 남습니다 . 이것은 기하학적으로 증명하기 쉽습니다.

너비가 650m 인 맵에서 10m 폴리 라인 버퍼 (회색)와 -10m 버퍼 (연한 빨강)의 예는 다음과 같습니다.

그림 1

이제이 폴리곤 레이어와 원래 폴리 라인 레이어를 교차시키고 아일랜드 식별자로 세그먼트를 병합하고 조각을 계산합니다.

그림 2

옅은 노랑색 세그먼트는 높은 개수의 조각을 나타내고 짙은 시안 색 세그먼트는 낮은 개수의 조각을 나타냅니다. 이러한 방식으로 우리는 (a) 모든 굽힘과 교차점 (자체 교차로 포함) 과 가까운 교차점 (두 세그먼트가 완전히 맞지 않는 왼쪽 끝 참조)을 발견했으며 (b) 굽힘과 교차점을 구분했습니다. 연결된 세그먼트가 둘 이상 포함 된 섬을 선택하면 거의 접합점을 찾을 수 있습니다. 굽힘에는 연결된 세그먼트 만 포함됩니다.

버퍼링의 대칭으로 인해 교차로 섬의 중심이 교차점입니다.

이 스타일의 분석의 한 가지 아름다운 측면은 기본 폴리 라인이 표현되는 방식에 신경 쓰지 않는다는 것입니다. 단일 폴리 선일 수도 있고, 각 선분에 대해 하나의 피처가 될 수도 있고 그 사이의 다른 것이 될 수도 있습니다.


6

예, FME에서이 작업을 수행 할 수 있습니다. 정리, 교차점 및 토폴로지를 처리하는 많은 "변환기"가 있습니다. 이 경우 TopologyBuilder 변환기를 사용해보십시오 .

모든 스크립팅은 모두 그래픽 환경에서 수행되므로 매우 간단합니다.

www.safe.com에서 언제든지 평가판을 얻을 수 있습니다.

(공개 : Mark Ireland, 일명 FME Evangelist, Safe Software Inc.)


나는 이것을 두 번째로한다. FME는 AutoCAD에서 GML 로의 변환 및 토폴로지 정리 모두에서이 특정 문제에 적합합니다. 응용 프로그램에서 놀랍도록 보편적 일 수 있습니다.
blord-castillo 님이


-1

무료 평가판으로 얻을 수있는 Arcgis 네트워크 분석가는 10 초 이내에 몇 번의 클릭만으로이 작업을 수행합니다.


-1

네트워크 분석가와 함께 ArcGIS에서 프로세스를 수행 할 수 있습니다.

ArcGIS에는 또 다른 방법이 있습니다. "아르크 툴박스"→ "데이터 관리 도구"→ "기능"→ "피처 정점을 포인트로"하면 필요한 작업을 수행 할 수 있습니다.

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