Je dois insérer un polygone de GeoJSON dans ma table PostGIS. Voici à quoi ressemble la requête SQL.
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]
]
}'
)
)
Malheureusement, je reçois un message d'erreur.
ERROR: Geometry SRID (0) does not match column SRID (3857)
Le GeoJSON est déjà dans le bon système de référence. Mais ce n'est pas spécifié. Comment spécifier le SRID dans le GeoJSON? À quoi doit ressembler le GeoJSON?
Mise à jour: Quand j'Enveloppez la géométrie créée par ST_GeomFromGeoJSON
avec ST_SetSRID(..., 3857)
elle lance une autre erreur. À mon avis, il ne semble pas que la géométrie ait une dimension Z.
ERROR: Geometry has Z dimension but column does not
Réponses:
En regardant le code source de PostGIS, j'ai découvert comment il analyse les SRID. Voici la manière correcte de spécifier le SRID dans GeoJSON.
La spécification GeoJSON indique que les coordonnées d'un polygone sont un tableau de lignes. Par conséquent, je devais les emballer avec des supports supplémentaires.
la source
Il y a quelques problèmes avec votre JSON.
Une fois ces deux choses corrigées, vous pouvez insérer la ligne à l’aide de la requête SQL suivante:
Si cela ne fonctionne pas (c'est-à-dire que vous obtenez toujours l'erreur avec Z diemsnion), veuillez mettre à jour la question avec la version PostGis et la déclaration Create de votre table.
la source
votre geojson doit plutôt avoir des valeurs UTM, vous pouvez le transformer avec Proj ou d'autres outils en ligne, mais vous pouvez le faire facilement et directement avec postgis avant de l'insérer dans votre tableau, essayez ceci (non testé):
la source
ERROR: transform: couldn't project point (9.25253e-302 6.08985e+159 1.18576e-322): latitude or longitude exceeded limits (-14)
manquant "'"
la source