Necesito insertar un polígono de GeoJSON en mi tabla PostGIS. Así es como se ve la consulta 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]
]
}'
)
)
Lamentablemente, recibo un mensaje de error.
ERROR: Geometry SRID (0) does not match column SRID (3857)
GeoJSON ya está en el sistema de referencia correcto. Pero esto no está especificado. ¿Cómo especifico el SRID en GeoJSON? ¿Cómo debe ser el GeoJSON?
Actualización: Cuando envuelvo la geometría creada por ST_GeomFromGeoJSON
la ST_SetSRID(..., 3857)
lanza otro error. En mi opinión, no parece que la geometría tenga una dimensión Z.
ERROR: Geometry has Z dimension but column does not
Respuestas:
Echando un vistazo al código fuente de PostGIS, descubrí cómo analiza los SRID. Aquí está la forma correcta de especificar el SRID en GeoJSON.
La especificación GeoJSON dice que las coordenadas de un polígono son una matriz de cadenas de líneas. Por lo tanto, tuve que envolverlos con corchetes adicionales.
fuente
Hay un par de problemas con su JSON.
Una vez que corrija estas dos cosas, puede insertar la fila, utilizando la siguiente consulta SQL:
Si esto no funciona (es decir, aún recibe el error con Z diemsnion), actualice la pregunta con la versión PostGis y la Declaración de creación de su tabla.
fuente
su geojson debe tener valores UTM en su lugar, puede transformar eso con Proj u otras herramientas en línea, pero puede hacerlo fácil y directamente con postgis antes de insertarlo en su tabla, intente esto (sin probar):
fuente
ERROR: transform: couldn't project point (9.25253e-302 6.08985e+159 1.18576e-322): latitude or longitude exceeded limits (-14)
desaparecido "'"
fuente