Мне нужно вставить многоугольник из GeoJSON в мою таблицу PostGIS. Вот так выглядит 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]
]
}'
)
)
К сожалению, я получаю сообщение об ошибке.
ERROR: Geometry SRID (0) does not match column SRID (3857)
GeoJSON уже находится в правильной системе отсчета. Но это не указано. Как мне указать SRID в GeoJSON? Как должен выглядеть GeoJSON?
Обновление: Когда я обернуть геометрию , созданную ST_GeomFromGeoJSON
с ST_SetSRID(..., 3857)
его бросает другую ошибку. На мой взгляд, не похоже, что геометрия имеет размерность Z.
ERROR: Geometry has Z dimension but column does not
Ответы:
Взглянув на исходный код PostGIS, я узнал, как он анализирует SRID. Вот правильный способ указать SRID в GeoJSON.
В спецификации GeoJSON говорится, что координаты многоугольника представляют собой массив строк. Поэтому мне пришлось обернуть их дополнительными скобками.
источник
Есть несколько проблем с вашим JSON.
Как только вы исправите эти две вещи, вы можете вставить строку, используя следующий SQL-запрос:
Если это не работает (т.е. вы все еще получаете ошибку с Z diemsnion), пожалуйста, обновите вопрос с помощью версии PostGis и инструкции Create your table.
источник
вместо этого ваш geojson должен иметь значения UTM, вы можете преобразовать его с помощью Proj или других онлайн-инструментов, но вы можете легко и напрямую сделать это с помощью postgis, прежде чем вставлять его в таблицу, попробуйте это (не проверено):
источник
ERROR: transform: couldn't project point (9.25253e-302 6.08985e+159 1.18576e-322): latitude or longitude exceeded limits (-14)
отсутствует "'"
источник