【问题标题】:Shapefile into geojson conversion python 3shapefile到geojson转换python 3
【发布时间】:2017-08-24 10:45:12
【问题描述】:
output_buffer = []
for features in range(0,layer.GetFeatureCount()):
    feat = layer.GetNextFeature()
    geom = feat.GetGeometryRef()
    result = feat.ExportToJson()
    output_buffer.append(result)

当我转换成 geojson 时,我得到了输出,但只有一个特征被格式化为 JSON

我得到这样的输出:

{"geometry": {"coordinates": [488081.726322771, 2360837.62927308], "type": "Point"}, "type": "Feature", "id": 0, "properties": {"EntityHand": null, "Layer": "pipe", "Linetype": null, "Text": "BB_D2", "ExtendedEn": null, "SubClasses": null}}{"geometry": {"coordinates": [487523.119248441, 2361228.95273474], "type": "Point"}, "type": "Feature", "id": 1, "properties": {"EntityHand": null, "Layer": "pipe", "Linetype": null, "Text": "Mil_D2", "ExtendedEn": null, "SubClasses": null}}..................

我想得到这样的输出:

{"geometry": {"coordinates": [488081.726322771, 2360837.62927308], "type": "Point"}, "type": "Feature", "id": 0, "properties": {"EntityHand": null, "Layer": "pipe", "Linetype": null, "Text": "BB_D2", "ExtendedEn": null, "SubClasses": null}}**,**    
{"geometry": {"coordinates": [487523.119248441, 2361228.95273474], "type": "Point"}, "type": "Feature", "id": 1, "properties": {"EntityHand": null, "Layer": "pipe", "Linetype": null, "Text": "Mil_D2", "ExtendedEn": null, "SubClasses": null}}**,**

【问题讨论】:

  • 请将您的问题格式化为清晰易读的内容...
  • 如果您提供一个工作示例会有所帮助。如果您的问题无法复制,则无法回答。
  • @RutgerKassies。正确的程序是在这种情况下进行适当的近距离投票。
  • 你在用什么库?
  • 嘿,Srinuvas Bathula:这个答案获得了很多关注,已经快 3 年了。由于这是唯一的答案,并且问题和答案得到了相当多的积极反馈,您介意将其标记为正确吗? :)

标签: python json append shapefile gdal


【解决方案1】:

请查看以下库:https://pypi.python.org/pypi/pyshp/1.1.7

import shapefile
from json import dumps

# read the shapefile
reader = shapefile.Reader("my.shp")
fields = reader.fields[1:]
field_names = [field[0] for field in fields]
buffer = []
for sr in reader.shapeRecords():
    atr = dict(zip(field_names, sr.record))
    geom = sr.shape.__geo_interface__
    buffer.append(dict(type="Feature", \
    geometry=geom, properties=atr)) 
   
    # write the GeoJSON file
   
geojson = open("pyshp-demo.json", "w")
geojson.write(dumps({"type": "FeatureCollection", "features": buffer}, indent=2) + "\n")
geojson.close()

如其他答案所述,您可以使用 geopandas:

import geopandas

shp_file = geopandas.read_file('myshpfile.shp')
shp_file.to_file('myshpfile.geojson', driver='GeoJSON')

【讨论】:

    【解决方案2】:

    对于 shapefile 和 geojson 之间的转换,我肯定会使用 geopandas:

        import geopandas
        myshpfile = geopandas.read_file('myshpfile.shp')
        myshpfile.to_file('myJson.geojson', driver='GeoJSON')
    

    【讨论】:

      【解决方案3】:

      添加到@alexisdevarennes。

      您现在可以使用 PyShp 在 1 或 2 行中转换为 geojson:

      import shapefile
      
      with shapefile.Reader("shapefile.shp") as shp:
          geojson_data = shp.__geo_interface__
      

      或

      geojson_data = shapefile.Reader("shapefile.shp").__geo_interface__
      

      示例用法:

      >>> geojson_data["type"]
      
      'MultiPolygon'
      

      【讨论】:

        猜你喜欢
        • 2018-11-29
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 2017-06-23
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多