Как создать многоугольник, используя поля в PostgreSQL?

StackOverflow https://stackoverflow.com/questions/1105757

  •  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 метров.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top