Як перетворити / набрати з полігону в мультиполігон в PostGIS?


30

Чи є спосіб набрати полігони на тип багатополігона?

Наприклад, я створив коло за допомогою ST_Buffer () на точку. Тип повернення цієї функції має тип многокутника. Проблема полягає в тому, що на стовпчику геометрії існує обмеження, що обмежує його на тип мультиполігону. Отже, я не можу вставити простий багатокутник.

Я використовував функцію ST_MPolyFromText (), але, як завжди, вона повертає нуль для цього, а ST_Dump () не дає належного результату.

Обмеженням є:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),

Чи є причина для додавання багатополігонового обмеження? Як щодо зміни обмеження на багатокутник?
underdark

Хіба це не дитяче питання gis.stackexchange.com/questions/14198/… ?
unicoletti

Так є, але це може бути перефразоване і як окреме питання.
underdark

так, це питання для дітей, але проблема полягає в тому, що ви імпортуєте файл форми в постгіс, який містить шар багатокутника, то він автоматично створює геометрію багатополігона. тоді трохи нудно перетворювати тип даних з багатополігона в багатокутник .. тому що це зробить клієнт. Тож просто потрібно зберегти вихід у цей стовпчик цього типу, створений поштами ..
Вікі

PS: щоб зробити зворотну, від мульти-до-полі, використовувати st_geometryn(geom, 1).
Пітер Краус

Відповіді:


55

ST_Multi - Повертає геометрію як MULTI * геометрію. Якщо геометрія вже MULTI *, вона повертається незмінною.

Приклад:

SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
        743265 2967450,743265.625 2967416,743238 2967416))')));
        st_astext
        --------------------------------------------------------------------------------------------------
        MULTIPOLYGON(((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,
        743238 2967416)))
        (1 row)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.