Как создать полигон с помощью полей в PostgreSQL?
У меня есть 8 реальных значений в таблице, которые я хотел бы объединить в многоугольник. Однако я не смог понять, как создать многоугольник, используя эти значения. Я продолжаю пробовать варианты
SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table;
но продолжайте получать ошибки о функции polygon, не существующей или недопустимом синтаксисе ввода для типа polygon. Кто-нибудь делал это раньше?
3 ответов
синтаксис для обычного многоугольника postgres больше похож на:
insert into geo_table values (1, '((2,2),(3,4),(3,6),(1,1))');
где 1 - некоторый идентификатор, а цитируемая запись-многоугольник. Я ожидал бы, что запрос будет похожим, вам, вероятно, нужны круглые скобки и т. д. Для координат. Обычно для геопространственных данных вы хотите (Lon Lat) координаты. Postgis также принимает WKT заявления типа:
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. Здесь, коробка приблизительно 500m 500m.
-
Добавить новый столбец геометрии " 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 требует двойных скобок ' (())'.