如何从具有重叠线段的线串中提取子线串


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'(相反方向)。在这种情况下,该段提取错误(其中包括额外的段)。

如何解决这样的问题?重叠的公交路线可以在路线的任何部分发生... 例


有没有一种方法可以识别公交路线的终点并将封闭的线串分成任一方向的一条线?这样,您将不再有重叠的细分。例如,您可以找到直线上最远的点,然后使用该点将直线分成两个方向。
拉斐尔2014年

3
这是一个老问题,但是,看起来您需要开始并设置截面,与点数据集合并,并删除起始点顺序大于终点的任何截面。这有意义吗?
豪尔赫·桑兹

1
您能否提供给定公交路线的几何图形WKT?
kttii

Answers:


1

假设公交线路在任何给定点处自身重叠不超过2次,则可以通过将第二条线定位点的线反转,找到最接近该线终点的最接近点来解决。您将需要从1中减去它才能在ST_LineSubstring查询中使用。例如

ST_LineSubstring(ln.the_geom,
  ST_LineLocatePoint(ln.the_geom, pt1.the_geom),
  1 - ST_LineLocatePoint(ST_Reverse(ln.the_geom), pt2.the_geom))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.