怎么循环访问Geojson元素
本教程将介绍如何循环访问Geojson元素的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。
问题描述
我想执行此问题中的代码https://gis.stackexchange.com/questions/142391/storing-geojson-featurecollection-to-postgresql-with-postgis/142479#142479
但当我运行该应用程序时,收到以下错误:
query="""
KeyError: ' "type"'
请告诉我怎么修复它。
编码:
def exeGeoFromGeoJSONToWKT(self): query="""
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 featuresCollection)
SELECT
LIDARDataPolygonsAsGeometry
FROM (
SELECT
ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(feature->>'geometry'),4326),25832) AS LIDARDataPolygonsAsGeometry
FROM (SELECT json_array_elements(featuresCollection->'features') AS feature
FROM data) AS f
"""
print(query)
data = self.connection.query(query,[])
# print(data) return data
尝试:
query="""
WITH data AS (
SELECT $${ "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
"properties": {"prop0": "value0"}
}
]}$$::json AS featuresCollection)
SELECT
LIDARDataPolygonsAsGeometry
FROM (
SELECT
ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(feature->>'geometry'),4326),25832) AS LIDARDataPolygonsAsGeometry
FROM (SELECT json_array_elements(featuresCollection->'features') AS feature
FROM data) AS f
"""
推荐答案
从数据库的角度来看,查询运行良好,但问题似乎出在查询构建上。您的查询有一个包含多个"
双引号的JSON文档,因此您可以转义它们("
),或者尝试使用另一个answer中所述的参数将JSON添加到查询中。
无关:您不需要这3个嵌套子查询。一个查询就可以了:
WITH data AS (
SELECT '{ "type": "FeatureCollection",
...
]}'::json AS mygeojson
)
SELECT
ST_Transform(
ST_SetSRID(
ST_GeomFromGeoJSON(json_array_elements(
mygeojson->'features')->>'geometry'),
4326),
25832) AS feature
FROM data
好了关于怎么循环访问Geojson元素的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。