Как создать многоугольник, используя поля в PostgreSQL?
-
12-09-2019 - |
Вопрос
У меня есть 8 реальных значений в таблице, которые я хотел бы объединить в многоугольник.Однако мне не удалось понять, как создать многоугольник, используя эти значения.Я продолжаю пробовать варианты
SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table;
но продолжает получать ошибки о том, что функция многоугольника не существует или неверный синтаксис ввода для типа многоугольника.Кто-нибудь делал это раньше?
Решение
Синтаксис обычного многоугольника Postgres больше похож на:
insert into geo_table values (1, '((2,2),(3,4),(3,6),(1,1))');
Где 1 — это некоторый идентификатор, а указанная запись — это многоугольник.Я ожидаю, что запрос будет аналогичным, вам, вероятно, понадобятся круглые скобки и т. д. для координат.Обычно для геопространственных данных требуются координаты (долгосрочная широта).Postgis также принимает ВКТ высказывания типа:
GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
Другие советы
Как упоминалось bvmou - GeomFromText
будет работать нормально.Я просто добавлю небольшое обновление синтаксиса:
GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
В этом примере координаты долготы и широты берутся из таблицы и преобразуются в геометрию.Размеры каждого поля указаны как long_high, long_low, lat_high и lat_low.Вот коробка примерно 500 на 500 метров.
Добавьте в таблицу новый столбец геометрии «box».
SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
Обновите новое поле, указав эти значения.
UPDATE predpol_raw SET box = ST_Transform( ST_GeomFromText( format('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))', long_high,lat_high, long_low,lat_high, long_low,lat_low, long_high,lat_low, long_high,lat_high ), 4326 ), 2240 );
Обратите внимание на преобразование в другую пространственную привязку.Ключевое слово POLYGON требует двойных круглых скобок «(( ))».