Preciso inserir um polígono do GeoJSON na minha tabela PostGIS. É assim que a consulta SQL se parece.
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]
]
}'
)
)
Infelizmente, recebo uma mensagem de erro.
ERROR: Geometry SRID (0) does not match column SRID (3857)
O GeoJSON já está no sistema de referência correto. Mas isso não está especificado. Como especifico o SRID no GeoJSON? Como é o visual do GeoJSON?
Update: Quando eu embrulhar a geometria criado por ST_GeomFromGeoJSON
com ST_SetSRID(..., 3857)
ele lança outro erro. Na minha opinião, não parece que a geometria tenha uma dimensão Z.
ERROR: Geometry has Z dimension but column does not
Respostas:
Analisando o código fonte do PostGIS, descobri como ele analisa os SRIDs. Aqui está a maneira correta de especificar o SRID no GeoJSON.
A especificação GeoJSON diz que as coordenadas de um polígono são uma matriz de cadeias de linhas. Portanto, eu tive que envolvê-los com colchetes adicionais.
fonte
Existem alguns problemas com o seu JSON.
Depois de corrigir essas duas coisas, você pode inserir a linha, usando a seguinte consulta SQL:
Se isso não funcionar, (ou seja, você ainda está recebendo o erro com o Z diemsnion), atualize a pergunta com a versão do PostGis e a instrução Create da sua tabela.
fonte
seu geojson deve ter valores UTM; você pode transformá-lo com o Proj ou outras ferramentas on-line, mas pode fazê-lo facilmente e diretamente com o postgis antes de inseri-lo na sua tabela, tente o seguinte (não testado):
fonte
ERROR: transform: couldn't project point (9.25253e-302 6.08985e+159 1.18576e-322): latitude or longitude exceeded limits (-14)
ausência de "'"
fonte