ST_MakeLine возвращает неподдерживаемые геометрии, не отображаемые в средстве просмотра геометрии

Aug 20 2020

Я пытаюсь запустить запрос ST_MakeLine, который вернет кратчайшее расстояние между заданными координатами. Код выглядит следующим образом:

SELECT ST_MakeLine(route.geom)  as test
FROM (SELECT *
      FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

Результат выглядит так:

ясно, что результат не показывает null. Но когда я просматриваю его в средстве просмотра геометрии, он дает следующее сообщение:

Может ли кто-нибудь сказать мне, что означает это сообщение и как я могу найти способ решения этой проблемы? Тип геометрии моего шейп-файла дорог - MULTILINESTRING.

St_AsText (route.geom) показывает следующий результат:

SELECT ST_AsText( ST_MakeLine(route.geom)) FROM (SELECT *FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

Использование простого Select from pgr_fromAtoB дает:

SELECT * FROM pgr_fromAtoB('roads2_noded',73.1789,33.5183,73.1768,33.5191) ORDER BY seq

Road2_noded - это шейп-файл дорог, над которым я работаю, показанный ниже:

Ответы

1 Mohid Aug 22 2020 at 07:28

Функции pg_Routing нельзя использовать для MultiLineStrings. Поэтому сначала создайте новую таблицу со всеми записями данных таблицы Road2. Затем добавьте столбцы дорог2 в новую таблицу. Например, id, sub_id, name, distance, geom и т. Д. Затем используйте следующий запрос, чтобы преобразовать геометрию MultiLineString дорог2 в LineString.

ALTER TABLE my_table
ALTER COLUMN geom TYPE geometry(linestring,4326) USING ST_GeometryN(geom, 1);

После этого добавьте в новую таблицу столбец geom дорог2. После этого примените запросы дорожной сети и топологии, то есть pgr_nodeNetwork и pgr_createTopology, и создайте функцию pgr_fromAtoB Затем запустите запрос ST_MakeLine:

SELECT ST_MakeLine(route.geom)  as test
FROM (SELECT *
      FROM pgr_fromAtoB('my_table_noded',73.1789,33.5183,73.1768,33.5191)
      ORDER BY seq
     ) As route

Результат покажет геометрию: