Создание геометрии полигона из текстового поля той же таблицы в PostGiS - PullRequest
0 голосов
/ 25 января 2019

У меня есть такая таблица

 Table "public.zone_polygons"
  Column   |          Type           |        
-----------+-------------------------+
 id        | integer                 |
 zone_id   | integer                 | 
 zone_name | text                    | 
 zone_path | text                    | 
 geom      | geometry(Geometry,4326) |

У каждого zone_path есть список значений long long в виде текста в этом формате

75.2323 30.7423,
75.3432 30.5344,
75.5423 30.2342,
75.9123 30.3122,
75.2323 30.7423

Я пытаюсь сгенерировать геометрию, используя значения zone_path, используя следующий запрос.

update zone_polygons set geom=ST_SetSRID(ST_MakePolygon(ST_GeomFromText('LINESTRING(zone_path)')), 4326);

Я получаю ошибку ниже

ERROR:  parse error - invalid geometry
HINT:  "LINESTRING(zo" <-- parse error at position 13 within geometry

Есть ли в Postgis способ использовать одно из полей для создания геометрии.

1 Ответ

0 голосов
/ 25 января 2019

Я полагаю, что у вас есть опечатка, и координаты указаны в Лонг - Лат (Индия), а не в Лат-Лонг (середина Баренцева моря).PostGIS ожидает координаты как Long - Lat, поэтому, если список ввода действительно в lat-long, его нужно поменять местами.Вы можете исправить источник или использовать ST_FlipCoordinates

Поскольку координаты сохраняются в столбце, вам нужно объединить LINESTRING( и содержимое столбца (не имя), используя'LINESTRING(' || zone_path || ')'

with src as (select '75.2323 30.7423, 75.3432 30.5344, 75.5423 30.2342, 75.9123 30.3122, 75.2323 30.7423' zone_path)
SELECT ST_ASTEXT(
   ST_SetSRID(
     ST_MakePolygon(
       ST_GeomFromText('LINESTRING(' || zone_path || ')')), 4326))
FROM src;


--> POLYGON((75.2323 30.7423,75.3432 30.5344,75.5423 30.2342,75.9123 30.3122,75.2323 30.7423))
...