Как конвертировать / typecast из Polygon в Multipolygon в PostGIS?

30

Есть ли способ типизации полигонов для мультиполигонов?

Например, я создал круг, используя ST_Buffer () для точки. Тип возврата этой функции - тип Polygon. Проблема в том, что на столбце геометрии есть ограничение, ограничивающее его типом Multipolygon. Итак, я не могу вставить простой многоугольник.

Я использовал функцию ST_MPolyFromText (), но, как обычно, она возвращает ноль для этого, а ST_Dump () не дает правильного вывода.

Ограничение:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),
Vicky
источник
Есть ли причина для добавления многополигонного ограничения? Как насчет изменения ограничения на полигон?
Подземье
Разве это не детский вопрос gis.stackexchange.com/questions/14198/… ?
Unicoletti
Это так, но это можно перефразировать, чтобы это тоже был отдельный вопрос.
Подземье
да, это вопрос для детей ,, но проблема в том, что когда вы импортируете шейп-файл в postgis, содержащий слой многоугольника, то он автоматически создает геометрию мультиполигона. тогда немного утомительно преобразовывать тип данных из мультиполигона в полигон ... потому что это будет сделано клиентом. Так что просто нужно сохранить выходные данные в этот столбец того типа, который создан postgis ..
Вики,
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)
Подземье
источник