Muszę wstawić wielokąt z GeoJSON do mojej tabeli PostGIS. Tak wygląda zapytanie 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]
]
}'
)
)
Niestety pojawia się komunikat o błędzie.
ERROR: Geometry SRID (0) does not match column SRID (3857)
GeoJSON jest już w odpowiednim systemie odniesienia. Ale nie jest to określone. Jak określić SRID w GeoJSON? Jak powinien wyglądać GeoJSON?
Aktualizacja: Kiedy owinąć geometrii utworzonej przez ST_GeomFromGeoJSON
z ST_SetSRID(..., 3857)
rzuca kolejny błąd. Moim zdaniem nie wydaje się, aby geometria miała wymiar Z.
ERROR: Geometry has Z dimension but column does not
Odpowiedzi:
Patrząc na kod źródłowy PostGIS, dowiedziałem się, jak analizuje on identyfikatory SRID. Oto poprawny sposób określenia SRID w GeoJSON.
Specyfikacja GeoJSON mówi, że współrzędne wielokąta są tablicą ciągów linii. Dlatego musiałem owinąć je dodatkowymi wspornikami.
źródło
Istnieje kilka problemów z JSON.
Po poprawieniu tych dwóch rzeczy możesz wstawić wiersz, używając następującego zapytania SQL:
Jeśli to nie zadziała (tzn. Nadal pojawia się błąd związany z Z diemsnion), zaktualizuj pytanie w wersji PostGis i Utwórz instrukcję dla swojej tabeli.
źródło
twój geojson musi mieć zamiast tego wartości UTM, możesz to przekształcić za pomocą Proj lub innych narzędzi online, ale możesz to zrobić łatwo i bezpośrednio za pomocą postgis przed wstawieniem go do stołu, wypróbuj to (niesprawdzone):
źródło
ERROR: transform: couldn't project point (9.25253e-302 6.08985e+159 1.18576e-322): latitude or longitude exceeded limits (-14)
brakuje „”
źródło