세그먼트가 겹치는 선 스트링에서 서브 라인 스트링을 추출하는 방법


15

문제 설명 : 버스 노선 (선 스트링 ln.the_geom으로 정의 됨)과 버스 정류장 위치 (pt1.the_geom, pt2.the_geom, ... ptn.the_geom)가 주어지면 버스 노선을 버스 정류장 사이의 세그먼트로 나눕니다. . 두 개의 postgis 기능을 사용하고 있습니다

    ST_line_substring(ln.the_geom,ST_line_locate_point
    ln.the_geom,pt1.the_geom),ST_line_locate_point(ln.the_geom,pt2.the_geom))

버스 경로에 겹치는 섹션이없는 경우 위의 방법이 효과적입니다. 그러나 겹치는 섹션이 있으면 ST_line_locate_point가 선 스트링의 다른 쪽 끝에 점을 찍습니다. 예를 들어, 버스는 A에서 B로 이동하고 루프를 만든 다음 B에서 A로 이동합니다. "A에서 B"와 "B에서 A"는 모든 지점이 겹치는 평행 경로입니다. 버스 정류장 P1 및 P2의 경우 P2는 대신 반대 방향으로 P2 '지점에 매핑됩니다. 이 경우 세그먼트가 잘못 추출됩니다 (추가 세그먼트가 포함 된 경우).

이와 같은 문제를 해결하는 방법? 겹치는 버스 노선은 노선의 모든 구간에서 발생할 수 있습니다. 예


버스 노선의 종점을 식별하고 닫힌 줄을 어느 방향으로나 줄로 나누는 방법이 있습니까? 그러면 더 이상 겹치는 세그먼트가 없습니다. 예를 들어, 선에서 시작점에서 가장 먼 지점을 찾은 다음 해당 지점을 사용하여 선을 두 방향으로 분리 할 수 ​​있습니다.
raphael

3
오래된 질문이지만 섹션의 시작과 포인트를 가져 와서 포인트 데이터 세트와 결합하고 초기 포인트가 끝 포인트보다 큰 섹션을 제거해야합니다. 이것은 말이됩니까?
Jorge Sanz 2016 년

1
주어진 버스 노선에 대한 지오메트리 WKT를 제공 하시겠습니까?
kttii

답변:


1

버스 경로가 주어진 지점에서 2 번 이상 겹치지 않는다고 가정하면 두 번째 줄 찾기 지점에 대한 줄을 뒤집어 줄 끝에서 가장 가까운 지점을 찾아서 해결할 수 있습니다. ST_LineSubstring 조회에 사용하려면이 값을 1에서 빼야합니다. 예 :

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