Jak przekonwertować / typecast z Polygon na Multipolygon w PostGIS?

30

Czy jest jakiś sposób, aby rzutować wielokąty na typ wielokąta?

Na przykład utworzyłem okrąg za pomocą ST_Buffer () w punkcie. Zwracany typ tej funkcji jest typu wielokąta. Problem polega na tym, że na kolumnie geometrii jest ograniczenie ograniczające ją do typu Multipolygon. Nie mogę więc wstawić prostego wielokąta.

Użyłem funkcji ST_MPolyFromText (), ale jak zwykle zwraca ona wartość NULL, a funkcja ST_Dump () nie daje prawidłowego wyniku.

Ograniczeniem jest:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),
Vicky
źródło
Czy istnieje powód dodania ograniczenia wieloboku? Co powiesz na zmianę wiązania na wielokąt?
podmroku
Czy to nie jest pytanie dla dzieci z gis.stackexchange.com/questions/14198/... ?
unicoletti
Tak jest, ale można by je przeformułować, by było osobnym pytaniem.
podmrok
tak, to jest pytanie dla dzieci, ale problem polega na tym, że kiedy importujesz plik kształtu do postgis, który zawiera warstwę wielokąta, to automatycznie tworzy geometrię wieloboku. to jest trochę nudne, aby przekonwertować typ danych z multipolygon na wielokąt .. ponieważ to zrobi klient. Więc po prostu trzeba zapisać wynik w tej kolumnie tego typu utworzonej przez postgis ..
Vicky
PS: odwrotnie, od multi-do-poly, użyj st_geometryn(geom, 1).
Peter Krauss

Odpowiedzi:

55

ST_Multi - Zwraca geometrię jako geometrię MULTI *. Jeśli geometria jest już MULTI *, jest zwracana bez zmian.

Przykład:

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)
podmrok
źródło