Как я могу создать полигон, используя поля в PostgreSQL? - PullRequest
8 голосов
/ 09 июля 2009

У меня есть 8 реальных значений в таблице, которые я хотел бы объединить в многоугольник. Я не смог понять, как создать полигон, используя эти значения. Я продолжаю пробовать варианты

SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table;

, но продолжайте получать ошибки о несуществующей функции многоугольника или неверном синтаксисе ввода для типа многоугольника Кто-нибудь делал это раньше?

Ответы [ 3 ]

13 голосов
/ 10 июля 2009

Синтаксис для обычного многоугольника 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))')

1 голос
/ 10 января 2011

Как упомянуто bvmou - GeomFromText будет работать нормально. Я просто добавлю небольшое обновление синтаксиса:

GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
0 голосов
/ 07 октября 2013

Этот пример берет координаты долготы и широты из таблицы и преобразует их в геометрию. Размеры каждого блока даны как long_high, long_low, lat_high и lat_low. Здесь коробка размером примерно 500 на 500 метров.

  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 требует двойных скобок '(())'.

...