【问题标题】:St_split return the original lineSt_split 返回原行
【发布时间】:2018-11-19 10:05:06
【问题描述】:

我想用 postgis 分割线串。

我的功能:

  @distance_b_to_a = Track.find_by_sql(
  ["SELECT
    ST_Split(line, ST_Closestpoint(pta,line))  AS dst_line
    FROM (
      SELECT
        'SRID=4326;LINESTRING(1.391991 46.441430,1.506078 46.556788)'::geometry line,
        'SRID=4326;POINT(1.396636962890625 46.442352066959174)'::geometry pta,
    ) data"
  ])

还有我的节目:

  <p>Test : <%= @distance_b_to_a.first.dst_line %></p>

返回我原来的线串:

Test : GEOMETRYCOLLECTION (LINESTRING (1.391991 46.44143, 1.506078 46.556788))

怎么了?

【问题讨论】:

  • 一条线只能由现有线顶点上的一点分割(与使用交叉线分割时不同)。看到这个有趣的doc
  • @JGH 一如既往的直截了当的回答! +1

标签: ruby-on-rails postgresql postgis


【解决方案1】:

ST_Split 返回通过拆分几何生成的几何集合,所以恐怕这是预期的结果,因为您的 LineString 只有两点。

考虑以下LineString ...

LINESTRING(18.6435 42.5412,18.8440 42.5453,18.846 42.3994)

.. 并运行此查询,该查询使用上述LineString 中的第二点应用ST_Split

WITH j AS (
SELECT 
    'SRID=4326;POINT(18.8440 42.5453)'::GEOMETRY AS pta,
    'SRID=4326;LINESTRING(18.6435 42.5412,18.8440 42.5453,18.846 42.3994)'::GEOMETRY AS line
)
SELECT 
  ST_AsText(
  ST_Split(line,
    ST_ClosestPoint(pta,line))) FROM j

...返回一个GeometryCollection 和两个LineStrings

                                                st_astext                                                 
----------------------------------------------------------------------------------------------------------
 GEOMETRYCOLLECTION(LINESTRING(18.6435 42.5412,18.844 42.5453),LINESTRING(18.844 42.5453,18.846 42.3994))
(1 Zeile)

【讨论】:

  • 谢谢,很清楚;) 是获取线串上存在的最近点并与他分割线的方法吗?
  • 它几乎与您在问题中所做的完全一样,即获取到给定坐标的最近点并使用该点分割线串。很高兴它有帮助 :-) 顺便说一句,@JGH 提供的链接值得一读!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
相关资源
最近更新 更多