다 대다 라우팅을 위해 도로망을 분할 한 후 관심있는 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확장 의 sourcetarget필드 값을 다시 계산하고 모든 정점과 해당 위치를 다음과 같이 포함 <edge_table>하는 <edge_table>vertices_pgr테이블을 만듭니다 GEOMETRY. 그런 다음

  • 문제의 정점 ​​ID를 시각적으로 찾습니다.
  • SELECTtarget삽입 된 모서리 의 값edge_id
  • 집 / POI의 기하학적 구조에 가장 가까운 테이블 정점의 공간 선택 (예 : (K) NN ) 실행<edge_table>_vertices_pgr

연결된 다른 질문을 염두에두고 두 번째 옵션에 따라 이러한 연결을 네트워크에 완전히 통합해야하는 pgr_TSP기능 군 (100 % 적용되지 않음)을 찾고있을 가능성이 있습니다.