2017-08-02 71 views
0

我有一個帶有郵政編碼和多邊形數據的Json文件。我想要將多邊形轉換並存儲到幾何數據類型的Postgres表中。我的postgres 9.5與PostGIS擴展。從json文件到Postgres幾何格式的多邊形

我的文件:myjson.json

數據:

{ 
    "zipcode": "97358", 
    "polygon": [ 
    { 
     "lat": 44.730418, 
     "lng": -122.544798 
    }, 
    { 
     "lat": 44.763411, 
     "lng": -122.685015 
    }, 
    { 
     "lat": 44.831045, 
     "lng": -122.616831 
    }, 
    { 
     "lat": 44.863487, 
     "lng": -122.401282 
    }, 
    { 
     "lat": 44.80795, 
     "lng": -122.40953 
    }, 
    { 
     "lat": 44.730418, 
     "lng": -122.544798 
    } 
    ] 
} 

Postges MYTABLE:郵政編碼VARCHAR,多邊形幾何

回答

0

這不是漂亮,但是這應該做的伎倆:

WITH polygon AS ( SELECT json_array_elements(t->'polygon') AS data FROM json($$ { "zipcode": "97358", "polygon": [ {"lat": 44.730418, "lng": -122.544798}, {"lat": 44.763411, "lng": -122.685015}, {"lat": 44.831045, "lng": -122.616831}, {"lat": 44.863487, "lng": -122.401282}, {"lat": 44.80795, "lng": -122.40953}, {"lat": 44.730418, "lng": -122.544798} ] }$$) as t) SELECT ST_MakePolygon(ST_GeometryFromText( 'LINESTRING(' || string_agg((p.data->'lng')::text || ' ' || (p.data->'lat')::text, ',') || ')', 4326)) FROM polygon AS p;

請注意,我已經將SRID(投影)硬編碼爲4326.如果此多邊形不在俄勒岡州,那麼您可能需要更正它。

+0

謝謝,它適用於一行記錄。使用Postres表中的數據時它不起作用。首先,我將json文件中的數據插入表中,並使用此建議腳本從此表中提取帶有多邊形(幾何格式)信息的郵政編碼。任何建議請 –