약 250.000 개의 세그먼트가있는 Shapefile (유럽 주요 도로로 구성)이 있으며 pgrouting을 위해 단순화해야합니다. 그러나 나는 그것을 올바르게하는 방법을 찾지 못하는 것 같습니다.
이것은 다음과 같습니다
이것이 다음과 같아야합니다.
나머지 점 사이의 토폴로지 연결을 유지하면서 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
각 점이 새로운 선 스트링 지오메트리를 시작한다는 것이 이미지에서 분명하지 않다고 생각합니다. 소스 / 대상 열을 채우기 위해 pgRouting의 assign_vertex_id 함수를 이미 실행 했습니까? 이 경우 나중에 두 번만 존재하는 소스 / 대상 ID를 식별하기 위해 일부 쿼리를 수행 할 수 있습니다. 즉,이 시점에서 두 선 세그먼트를 병합 할 수 있어야합니다. 소스 / 타겟 ID가 두 번 이상 존재하는 경우 교차점이어야합니다.
—
dkastl
@dkastl : 아주 좋은 생각입니다! 나는 그것을 얼마나 멀리 가지고 있는지 보여주는 내 질문을 업데이트했습니다.
—
chriserik