我该怎么办?
我将Postgres版本9.3.5与Postgis版本2.1.3一起使用
我已经针对先前提出的问题,这些问题回答了如何存储单个要素(例如点或多边形)。我的问题询问如何在GeoJSON文件中保存多个功能。 “多个要素”是指在一个文件中混合使用点,线和面要素类型。
#1 楼
假设您至少具有PostgreSQL 9.3版,则可以使用一些JSON函数和运算符来提取ST_GeomFromGeoJSON所需的GeoJSON规范的相关部分,以创建几何。尝试以下操作,在此处可以替换顶部的JSON:
WITH data AS (SELECT '{ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
"properties": {"prop0": "value0"}
},
{ "type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
},
{ "type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]
},
"properties": {
"prop0": "value0",
"prop1": {"this": "that"}
}
}
]
}'::json AS fc)
SELECT
row_number() OVER () AS gid,
ST_AsText(ST_GeomFromGeoJSON(feat->>'geometry')) AS geom,
feat->'properties' AS properties
FROM (
SELECT json_array_elements(fc->'features') AS feat
FROM data
) AS f;
查找三个几何。
geom
列具有几何对象,而gid
是要素编号。 ST_AsText
函数显示每个几何的WKT等效项。我还包含了可以为每种几何定义的properties
或属性,如规范中所示。使用ST_SetSRID。或者如果您只需要单个异类GEOMETRYCOLLECTION,则可以使其紧凑,如下所示:
gid | geom | properties
-----+------------------------------------------+--------------------------------------
1 | POINT(102 0.5) | {"prop0": "value0"}
2 | LINESTRING(102 0,103 1,104 0,105 1) | { +
| | "prop0": "value0", +
| | "prop1": 0.0 +
| | }
3 | POLYGON((100 0,101 0,101 1,100 1,100 0)) | { +
| | "prop0": "value0", +
| | "prop1": {"this": "that"}+
| | }
(3 rows)
另请参阅创建GeoJSON来自Postgres OnLine Journal的具有JSON和PostGIS功能的要素集合,其功能与此相反。
评论
如何将GeoJSON多边形插入PostGIS表的可能重复项?里卡多,您好,我已经看到了这个问题,但是并没有解决我的问题。我要保存功能列表,而不仅仅是单个功能类型。请在我的问题中查看我的GeoJSON功能集合。
@Jay所以现在您的问题是“如何将geojson集合分解为单个要素,或者您需要添加更多信息(也许存储那些几何属于某种集合的信息?)
谢谢@约翰的回复。由于我是GIS和GeoJSON的新手,所以我想就我的问题提出一些建议。问题的背景:用户在地图上绘制要素,而我捕获所绘制要素的集合。我想将此集合保存在具有唯一ID的数据库中。以后,可以为提供的ID提取保存的数据。 postgres中的testable有2列。序列号的gid列(用于保存id)和几何类型的geom列。
@Jay是的,您可以存储JSON,但是它不会是几何图形,因此您可以轻松查询最近的邻居等。.