怎么循环访问Geojson元素

本教程将介绍如何循环访问Geojson元素的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

怎么循环访问Geojson元素 教程 第1张

问题描述

我想执行此问题中的代码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元素的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。