라우팅 가능한 네트워크를 단순화하는 방법?


24

가장자리 수를 줄이려 면 단순화해야하는 네트워크 그래프가 있습니다. 아이디어는 서로 가까이 위치한 노드를 병합하고 연결 짧은 모서리를 제거하는 것입니다.

PostGIS 또는 GRASS에서 어떻게 이것을 달성 할 수 있습니까? 아니면 이와 같은 네트워크를 자동으로 단순화하는 더 나은 방법이 있습니까?

이미 ST_SnapToGrid 함수를 시도했지만 결과에 만족하지 않습니다 (회색 = 원본, 검정 = 스냅).

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


1
네트워크 기반 분석을 단순화하거나 표시 목적으로이 작업을 수행하고 있습니까? 전자의 경우 어떤 분석이 수행됩니까?
whuber

최단 경로 분석을위한 것입니다.
underdark

2
최단 경로 알고리즘이 O (E + V)이기 때문에이 단순화가 필요하지 않습니까? 다른 극단적 인 경우, 그러한 분석을 위해 종종보다 적극적으로 단순화 할 수 있습니다. 예를 들어 왼쪽에있는 3 개의 평행 세그먼트와 인접한 세그먼트 (상자에 보이는 모양)를 원점이나 목적지가 해당 세그먼트 내에 없으면 삼각형으로 대체 할 수 있습니다. (추상적 인) 그래프에서 그러한 작업을 위해 (GIS가 아닌) 코드가 있기 때문에 이것을 언급합니다.
whuber

모서리의 지오메트리 (예 : 곡선)를 유지 하시겠습니까, 아니면 토폴로지 + 노드 XY 만 유지 하시겠습니까? 또한 다른 Z (예 : 플라이 오버)의 노드가 서로 스냅되지 않도록해야합니까?
AnserGIS 2016 년

토폴로지가 핵심입니다. 형상이 약간 변경 될 수 있습니다. Z 순서는 그대로 유지해야합니다.
underdark

답변:


7

내가 지금까지 온 가장 가까운 것은 다음과 같습니다.

v.clean input=roads output=snap5rmline tool=snap,rmline thresh=5 

5m의 공차로 도로를 잠그고 길이가 0 인 모든 선을 제거합니다. 정점에 무작위로 스냅하는 것처럼 보이기 때문에 최적의 솔루션이 아닙니다.

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


실제로 결과는 정확하지 않을 수 있지만 공유해 주셔서 감사합니다. v.clean 을 사용하는 것이 흥미 롭습니다.
simo

그 이미지는 잔디로 만들어 졌습니까?
NetConstructor.com

이미지는 QGIS에서 시각화 된 GRASS v.clean의 결과를 보여줍니다.
underdark

"이상한 교차로"또는 등급별 도로를 유지하는 데 문제가 있습니까?
dassouki

v.clean 후 ST_SnapToGrid를 처리하는 것은 어떻습니까?
kttii

5

GRASS v.generalize를 사용해 보셨습니까 ?

v.generalizemethod 속성을 사용하여 일반화 알고리즘을 선택할 수 있습니다 . 다발이있다 : 더글라스, douglas_reduction, 랭, 감소, 로이 만, 보일, 슬라이딩 평균, 거리 가중치, 의자, 은둔, 뱀, 네트워크, 변위 .

그리고 추가 매개 변수로는 threshold, degree_thresh, angle_thresh(선택 알고리즘에 따라) 당신이 정확한 결과를 얻을하는 데 도움이 될 수 있습니다.

여기 튜토리얼이 있습니다.


링크 주셔서 감사합니다. 방법과 임계 값의 조합이 내가 원하는 결과를 줄 수는 없지만 실제로 시도해보고 있습니다.
underdark

나는 내가 원하는 것을 할 v.generalize 메소드를 찾을 수 없습니다.
underdark

2
그것은 유감스럽고 명령에는 많은 알고리즘이 풍부하지만 앞에서 말했듯이 예상되는 결과를 얻기 위해 설정하는 것은 매우 복잡합니다. 아마 일반화 알고리즘 전문가일까요? 방법 도 사용해 보셨습니까 ?
simo

여기에 algo-guru가 아니지만, 과거에 만든 v.genralize 실행 중 일부에 대해 뱀 방법이 가장 좋습니다.
11

1
기록을 위해 오늘 GRASS SVN에서 매개 변수가 단순화되었습니다. GRASS의 일부가 되려면 6.4.2.
markusN

4

나는 이것을하지 않았지만 방향을 제안 할 수 있다고 생각합니다.

  1. 그래프에 PostGIS를 사용하여 토폴로지를 만듭니다.
  2. 모서리가 두 개인 모든 노드를 찾으십시오.
  3. 가장자리를 치료하십시오.

ST_ModEdgeHeal은 한쪽 가장자리를 다른 쪽 가장자리에 병합합니다. ST_NewEdgeHeal은 둘 다 새로운 모서리로 대체합니다.

PostGIS 토폴로지 매뉴얼


감사합니다 @Sean. 두 가장자리를 병합하는 것 외에 다른 작업을 수행합니까? 짧은 모서리를 제거하고 노드를 함께 스냅하는 방법에 대한 아이디어가 있습니까?
underdark

@Underdark, 나는 간단한 것을 보지 못했습니다. PL / SQL에서 모든 것을 할 수는 있지만 도움이되지 않을 것입니다. ST_SnapToGrid를 먼저 실행할 수 있습니까?
Sean

1

@underdark, Sextante의 라인을 고밀도화 하는 도구를 작성 했음을 알았습니다. 따라서 "무작위"가 포인트 중 하나에 걸리지 않도록 다음 알고리즘을 제안합니다.

길이를 기준으로 제거 할 선 세그먼트를 선택하십시오.

이러한 각 세그먼트에 대해 중간 점에 점을 작성하십시오.

작은 세그먼트를 삭제

이제 PostGIS에서 ST_Snap을 사용할 수 있습니다 ( 여기 예제 참조 ).

편집 : 귀하의 경우 의사 노드 (두 줄만 연결하는 노드)를 제거하기 위해 v.net을 먼저 사용할 수도 있습니다


가상 노드를 제거하기 위해 v.net을 사용하는 방법을 자세히 설명하십시오. 감사합니다
osmjit

0

Michaël Michaud가 OpenJUMP 개발자 목록에서이를 분석 한 방법을 전달 :

> Interesting question. There has been so much research works about
> generalization that it is surely not a simple task. I have tested the
> following approach with mitigated results :
> - make the layer planar with the noder plugin
> - detect small cycles with the graph plugin
> - merge adjacent cycles
> - create a point inside each cycles surface
> - remove network segments along these cycles (query + DE-9IM)
> - detect roads touching the cycles
> - project the center points of cycles to the road endpoints ==> replace small roundabout by simple nodes
> 
> Possible improvements (probably need a dedicated plugin)
> - make it work on non planar graph (or just remove bridges/tunnels from the graph)
> - replace small edges between two nodes with degree 3+ by a single node,    not only small cycles
> - process iteratively starting with smallest edges/cycles

이 답변을 게시 해 주셔서 감사합니다. 그래프를 평면으로 강제하는 이유가 약간 혼란 스럽습니다. 결국 거리 네트워크는 평면 그래프 (교량, 터널)가 아닙니다.
언더 다크

Michaël이 OpenJUMP 용으로 작성한 기존 그래프 도구를 사용하여 빠른 테스트를 수행했으며 현재 비평면 그래프를 지원하지 않기 때문입니다. QGIS와 GRASS에 비평면 그래프를 지원하는 유사한 도구가있는 경우 첫 단계를 건너 뜁니다.
user30184 2016 년

나는 이것이 올바른 접근법이라고 생각합니다. 네트워크를 평면 그래프로 분리하십시오. 각 평면 그래프에서 문제는 더 간단합니다. 예를 들어 위의 접근 방식을 사용하거나 짧은 도로 가장자리의 TIN을 삼각 측량하고 잡초를 제거 할 수 있습니다. 그런 다음 도로 가장자리를 다시 추출하고 레이어를 병합하십시오.
AnserGIS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.