회선 네트워크 보존 토폴로지를 단순화하는 방법?


9

약 250.000 개의 세그먼트가있는 Shapefile (유럽 주요 도로로 구성)이 있으며 pgrouting을 위해 단순화해야합니다. 그러나 나는 그것을 올바르게하는 방법을 찾지 못하는 것 같습니다.

이것은 다음과 같습니다

http://i.stack.imgur.com/qJ2OJ.png

이것이 다음과 같아야합니다.

http://i.stack.imgur.com/FN4Z6.png

나머지 점 사이의 토폴로지 연결을 유지하면서 3 개 미만의 선 (교차하지 않음)에 연결된 선의 모든 점을 어떻게 든 제거해야합니다. 누구든지 아이디어가 있다면 크게 감사하겠습니다!

친애하는

편집 : @dkastl의 아이디어를 구현하려고 시도하고 아래 코드 (underdark의 블로그 http://underdark.wordpress.com 에서 가져온 네트워크 생성)로 내 네트워크에서 불필요한 노드 (2 개의 인접한 줄 문자열이있는 노드) 만 가져 왔습니다. / 2011 / 02 / 07 / 초보자 가이드 투 pgrouting / ) :

SELECT * FROM
   (SELECT tmp.id as gid, node.the_geom FROM 
     (SELECT id, count(*) FROM network 
     JOIN node 
     ON (start_id = id OR end_id = id) AND (end_id = id OR start_id = id)
     GROUP BY id ORDER BY id) as tmp
   JOIN node ON (tmp.id = node.id)
   WHERE tmp.count = 2) as unn_node;

이제 내가해야 할 일은 라인의 병합입니다. 그러나 나는 어떻게 실마리가 없다. 위의 쿼리 결과의 모든 행에 대해 인접한 줄을 가져 와서 병합하는 루프 여야한다고 생각합니다. 그런 다음 네트워크를 완전히 재구성하고 위의 쿼리가 빈 결과를 반환 할 때까지 프로세스를 반복합니다.


1
왜 pgRouting을 위해 이것을해야합니까? 이미 소스 / 대상 ID가 할당 된 경우 선 스트링으로 소스 및 대상 ID 만 포함하는 새 형상을 만들 수 있습니다. 그것은 두 번째 이미지처럼 보일 것입니다.
dkastl

문제는 선이 세그먼트 화 된 것입니다 (내가 게시 한 첫 번째 이미지를 보면 모든 지점이 새 세그먼트를 시작 / 종료하는 경우), 접근 방식은 형상을 단순화하지만 토폴로지는 단순화하지 않습니다.
chriserik

1
각 점이 새로운 선 스트링 지오메트리를 시작한다는 것이 이미지에서 분명하지 않다고 생각합니다. 소스 / 대상 열을 채우기 위해 pgRouting의 assign_vertex_id 함수를 이미 실행 했습니까? 이 경우 나중에 두 번만 존재하는 소스 / 대상 ID를 식별하기 위해 일부 쿼리를 수행 할 수 있습니다. 즉,이 시점에서 두 선 세그먼트를 병합 할 수 있어야합니다. 소스 / 타겟 ID가 두 번 이상 존재하는 경우 교차점이어야합니다.
dkastl

@dkastl : 아주 좋은 생각입니다! 나는 그것을 얼마나 멀리 가지고 있는지 보여주는 내 질문을 업데이트했습니다.
chriserik

답변:


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