2017-08-02 70 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文件中的数据插入表中,并使用此建议脚本从此表中提取带有多边形(几何格式)信息的邮政编码。任何建议请 –