python - 如何遍历 geojson 元素

标签 python sql postgresql postgis 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 文档,因此您可以转义它们 (\") 或尝试使用此中所述的参数将 JSON 添加到查询中其他 answer .

不相关:您不需要这 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   

关于python - 如何遍历 geojson 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68558791/

相关文章:

python - 修复由(某些)转义反斜杠破坏的 unicode 字符串

python - 使用 tf 监听器转换姿势在 Rviz 中不起作用

python - 使用列表指定 pandas 列

sql - 在 PostgreSQL 查询中转义列名中的字符?

sql - 显示每个 zip 中最高的 num_add 及其在 postgresql 中关联的 hrs 分数

python - Beautifulsoup "findAll()"不返回标签

mysql - SQL 使用 id 选择记录

python - 使用 Django 时我需要了解 SQL

sql - 根据列值从现有表生成新的临时表

java - 及时为大量数据库请求配置Spring JPA和PostgreSQL