Ich muss ein Polygon aus GeoJSON in meine PostGIS-Tabelle einfügen. So sieht die SQL-Abfrage aus.
INSERT INTO tablename (name, polygon)
VALUES (
'Name',
ST_GeomFromGeoJSON(
'{
"type": "Polygon",
"coordinates": [
[7.734375,51.835777520452],
[3.8671875,48.341646172375],
[7.20703125,43.580390855608],
[18.6328125,43.834526782237],
[17.9296875,50.289339253292],
[13.7109375,54.059387886624],
[7.734375,51.835777520452]
]
}'
)
)
Leider erhalte ich eine Fehlermeldung.
ERROR: Geometry SRID (0) does not match column SRID (3857)
Der GeoJSON befindet sich bereits im richtigen Referenzsystem. Dies ist jedoch nicht spezifiziert. Wie gebe ich die SRID im GeoJSON an? Wie muss der GeoJSON aussehen?
Aktualisieren: Wenn ich die Geometrie wickeln erstellt von ST_GeomFromGeoJSON
mit ST_SetSRID(..., 3857)
ihm einen weiteren Fehler wirft. Meiner Ansicht nach scheint die Geometrie keine Z-Dimension zu haben.
ERROR: Geometry has Z dimension but column does not
Antworten:
Als ich mir den Quellcode von PostGIS anschaute, fand ich heraus, wie er SRIDs analysiert. Hier ist die richtige Methode, um die SRID in GeoJSON anzugeben.
Die GeoJSON-Spezifikation besagt, dass die Koordinaten eines Polygons ein Array von Strings sind. Deshalb musste ich sie mit zusätzlichen Klammern umwickeln.
quelle
Es gibt einige Probleme mit Ihrem JSON.
Sobald Sie diese beiden Dinge korrigiert haben, können Sie die Zeile mit der folgenden SQL-Abfrage einfügen:
Wenn dies nicht funktioniert (dh Sie erhalten immer noch den Fehler mit Z diemsnion), aktualisieren Sie die Frage mit der PostGis-Version und der Create-Anweisung Ihrer Tabelle.
quelle
Ihr Geojson muss stattdessen UTM-Werte haben. Sie können dies mit Proj oder anderen Online-Tools umwandeln. Sie können dies jedoch einfach und direkt mit postgis tun, bevor Sie es in Ihre Tabelle einfügen. Versuchen Sie Folgendes (ungetestet):
quelle
ERROR: transform: couldn't project point (9.25253e-302 6.08985e+159 1.18576e-322): latitude or longitude exceeded limits (-14)
fehlendes "'"
quelle