다 대다 라우팅을 위해 도로망을 분할 한 후 관심있는 pgrouting 노드를 식별하는 방법은 무엇입니까?
Nov 13 2020
그래서 저는 소스 포인트 목록과 목적지 포인트 목록이 있습니다. 또한 거리 네트워크가 있고 ST_ShortestLine()
소스 / 목적지 지점과 거리 네트워크 사이를 사용하여 연결선을 만들었습니다 .
with unioned_ways as (
select ST_UNION(geom) as geom from my_ways
)
--(Same for source points)
select
ST_ShortestLine(adr.geom, way.geom)
from
my_destinations adr,
unioned_ways way
이제 ST_Split()
각 연결선의 끝점에서 도로 네트워크를 원하므로 최단 경로 분석을위한 최종 도로 네트워크가 있습니다. 이 라우팅은 각 출발지에서 목적지까지의 최단 경로를 식별해야합니다. 그러나 도로 네트워크를 절단하는 것만으로는 어떤 노드를 pgrouting의 소스 및 대상 노드로 선택해야하는지 알 수 없습니다. 일반적으로 라우팅에이 스크립트를 사용하고 관심이있는 특정 노드를 가리 킵니다.
SELECT seq, id1 AS node, id2 AS edge, cost, linestring
FROM pgr_dijkstra(
'SELECT id, source, target, st_length(linestring) as cost FROM my_ways',
17, --source node
10, --target node
false,
false
) as di
JOIN my_ways pt
ON di.id2 = pt.id ;
위의 분할 절차에서 소스 및 대상 노드의 목록 / 배열을 얻으려면 어떻게해야합니까?
답변
1 geozelot Nov 13 2020 at 09:02
두 가지 기본 옵션 :
pgr_withPoints
기능 군을 사용하여 미리 계산 된 가장 가까운 에지 세트를 기반으로 기존 네트워크에 노드 / 에지를 동적으로 추가합니다. 이것은 소스 및 대상 지점이 호출마다 달라지는 매우 동적 인 설정에서 비 네트워크 통합 라우팅을 우아하게 해결합니다. 일반적인 사용법에 대한 자세한 내용은 유사한 작업에 대한 내 대답 을
참조하십시오 .- 다른 질문을 읽으면 도로 네트워크에서 주택까지 참호를 나타내는 가장자리를 실제로 통합하는 것이 유용 할 수 있습니다. (확장 된) 네트워크는 다소 정적 일 수 있으며 실제 네트워크 에지로 작업하는 것이 결국 다소 직관적 일 수 있습니다.
가장 쉬운 방법은 간단하게하는 것입니다INSERT
당신의ST_ShortestLine
실제 네트워크 테이블과 실행에의 pgr_nodeNetwork다음 pgr_createTopolgy그것에 연결을 다시 계산 할 수 있습니다.
최신 정보:
pgr_createTopology
확장 의 source
및 target
필드 값을 다시 계산하고 모든 정점과 해당 위치를 다음과 같이 포함 <edge_table>
하는 <edge_table>vertices_pgr
테이블을 만듭니다 GEOMETRY
. 그런 다음
- 문제의 정점 ID를 시각적으로 찾습니다.
SELECT
target
삽입 된 모서리 의 값edge_id
- 집 / POI의 기하학적 구조에 가장 가까운 테이블 정점의 공간 선택 (예 : (K) NN ) 실행
<edge_table>_vertices_pgr
연결된 다른 질문을 염두에두고 두 번째 옵션에 따라 이러한 연결을 네트워크에 완전히 통합해야하는 pgr_TSP기능 군 (100 % 적용되지 않음)을 찾고있을 가능성이 있습니다.