St_split возвращает исходную строку - PullRequest
0 голосов
/ 09 июня 2018

Я хотел бы разделить строку строки с помощью 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))

Что не так?

1 Ответ

0 голосов
/ 11 июня 2018

ST_Split возвращает набор геометрий, полученных в результате разбиения геометрии, поэтому я боюсь, что это ожидаемый результат, поскольку у вашего LineString есть только две точки.

РассмотримLineString ...

LINESTRING(18.6435 42.5412,18.8440 42.5453,18.846 42.3994)

enter image description here

.. и выполните этот запрос, который применяет ST_Split, используя вторую точку изLineString:

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)

enter image description here enter image description here

...