Wie konvertiert man / typecast von Polygon zu Multipolygon in PostGIS?


30

Gibt es eine Möglichkeit, Polygone in Multipolygontypen umzuwandeln?

Zum Beispiel habe ich einen Kreis mit ST_Buffer () auf einem Punkt erstellt. Der Rückgabetyp dieser Funktion ist vom Typ Polygon. Das Problem besteht darin, dass für die Geometriespalte eine Beschränkung auf den Multipolygon-Typ besteht. Ich kann also kein einfaches Polygon einfügen.

Ich habe die Funktion ST_MPolyFromText () verwendet, aber wie gewöhnlich gibt sie dafür null zurück, und ST_Dump () gibt nicht die richtige Ausgabe aus.

Die Einschränkung ist:

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

Gibt es einen Grund für das Hinzufügen einer Multipolygon-Einschränkung? Wie wäre es, wenn Sie die Einschränkung in Polygon ändern?
Underdunkel

Ist das nicht eine Kinderfrage von gis.stackexchange.com/questions/14198/… ?
unicoletti

Es ist, aber es könnte umformuliert werden, um auch eine eigenständige Frage zu sein.
Underdunkel

ja, das ist eine Kinderfrage, aber das Problem ist, wenn Sie das Shapefile in das Postgis importieren, das die Polygonebene enthält, wird automatisch die Geometrie des Multipolygons erstellt. dann ist es ein bisschen mühsam, den Datentyp von Multipolygon in Polygon umzuwandeln, da dies vom Client vorgenommen wird. Sie müssen die Ausgabe nur in der Spalte speichern, die vom Postgis erstellt wurde.
Vicky,

PS: Um die Umkehrung von Multi-zu-Poly zu machen, benutze st_geometryn(geom, 1).
Peter Krauss

Antworten:


55

ST_Multi - Gibt die Geometrie als MULTI * -Geometrie zurück. Wenn die Geometrie bereits ein MULTI * ist, wird sie unverändert zurückgegeben.

Beispiel:

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.