Vairāk

Vai GeoJSON FeatureCollection glabāšana PostgreSQL ar PostGIS?


Esmu jauns GeoJSON. Man ir GeoJSON funkciju kolekcija, kā parādīts attēlā, un es vēlētos to glabāt postgres tabulā (testtable). Manai postgres tabulai ir sērijas ID un ģeometrijas kolonna.

{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [2565453.1826721914, -3835048.659760314]}}, { "type": "Feature", "geometry": {"type": "LineString", "coordinates": [[2727584.7219710173, -3713449.1942418693], [2732476.691781269, -3992291.473426192]]}}, {"type": "Feature" "," ģeometrija ": {" tips ":" Daudzstūris "," koordinātas ": [[[2442627.9025405287, -3705499.954308534], [2425506.008204649, -3886502.837287831], [2425506.008204649, -3886502.83855 2442627.9025405287, -3705499.954308534]]]}}]}

Es gribētu ievietot GeoJSON datus tabulas testa tabulā.

Kā man to darīt?

Es izmantoju postgres versiju 9.3.5 ar postgis versiju 2.1.3


Esmu novirzīts uz iepriekš uzdotajiem jautājumiem, kas atbild, kā saglabāt vienu elementu, piemēram, punktu vai daudzstūri. Mans jautājums jautā, kā saglabāt vairākas funkcijas GeoJSON failā. Ar vairākām pazīmēm es domāju punktu, līniju un daudzstūra pazīmju veidu sajaukumu vienā failā.


Pieņemot, ka jums ir vismaz PostgreSQL 9.3 versija, varat izmantot dažas JSON funkcijas un operatorus, lai iegūtu ģeogrāfijas izveidošanai atbilstošās GeoJSON specifikācijas daļas, kuras pieprasa ST_GeomFromGeoJSON.

Izmēģiniet sekojošo, kur augšējā daļā varat aizstāt JSON:

AR datiem AS (SELECT '{"type": "FeatureCollection", "features": [{"type": "Feature", "geometry": {"type": "Point", "coordinates": [102.0, 0.5 ]}, "īpašības": {"prop0": "value0"}}, {"type": "Feature", "geometry": {"type": "LineString", "coordinates": [[102.0, 0.0] , [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]]}, "rekvizīti": {"prop0": "value0", "prop1": 0.0}}, {"type": "Feature" , "ģeometrija": {"tips": "Daudzstūris", "koordinātas": [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]] ]}, "rekvizīti": {"prop0": "value0", "prop1": {"this": "tas"}}}]]} ':: json AS fc) SELECT row_number () OVER () AS gid, ST_AsText (ST_GeomFromGeoJSON (feat - >> 'geometry')) AS geom, feat -> 'īpašības' AS īpašības FROM (SELECT json_array_elements (fc -> 'Features') AS feat FROM data) AS f;

Atrod trīs ģeometrijas. Thegeomkolonnā ir ģeometrijas objekts ungidir objekta numurs. TheST_AsTextfunkcija parāda katras ģeometrijas WKT ekvivalentu. Esmu arī iekļāvisīpašībasvai atribūti, kurus var definēt katrai ģeometrijai, kā parādīts specifikācijā.

gid | geom | īpašības ----- + ------------------------------------------ + -------------------------------------- 1 | PUNKTS (102 0.5) | {"prop0": "value0"} 2 | LĪNIJA (102 0,103 1,104 0,105 1) | {+ | | "prop0": "vērtība0", + | | "prop1": 0,0 + | | } 3 | POLIGONS ((100 0,101 0,101 1100 1100 0)) {+ | | "prop0": "vērtība0", + | | "prop1": {"this": "tas"} + | | } (3 rindas)

Jums vajadzētu piešķirt ģeometrijai SRID, izmantojot ST_SetSRID.

Vai arī, ja jums vienkārši nepieciešama viena neviendabīga GEOMETRYCOLLECTION, varat to padarīt kompaktu šādi:

SELECT ST_AsText (ST_Collect (ST_GeomFromGeoJSON (feat - >> 'geometry'))) FROM (SELECT json_array_elements ('{... šeit ievietojiet JSON ...}' :: json -> 'Features') AS feat) AS f; GEOMETRYCOLLECTION (POINT (2.565.453,18267219 -3.835.048,65976031), LINESTRING (2.727.584,72197102 -3713449.19424187,2732476.69178127 -3.992.291,47342619), POLYGON ((2442627,90254053 -3705499.95430853,2425506.00820465 -3886502.83728783,2555143.20817631 -3910962.68633909,2442627.90254053 -3705499,95430853)))

Skatiet arī GeoJSON funkciju kolekciju izveide ar JSON un PostGIS funkcijām no žurnāla Postgres OnLine, kas rīkojas tieši pretēji.


Skatīties video: PostGIS GeoJSON to a web browser via Django (Septembris 2021).