Как создать полигон с помощью полей в 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.

  1. Добавить новый столбец геометрии " box " в таблицу

    SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
  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 требует двойных скобок ' (())'.