代码之家  ›  专栏  ›  技术社区  ›  conv3d

将geopandas shapely polygon转换为geojson

  •  2
  • conv3d  · 技术社区  · 6 年前

    我用geopandas创建了一个圆,它返回了一个形状优美的多边形:

    POLYGON: ((...))
    

    我想要这个多边形作为geojson对象我偶然发现:

    shapely.geometry.mapping(shapelyObject)
    

    它返回:

    {'type': 'Polygon', 'coordinates': (((570909.9247264927, 125477.71811034005)...}
    

    但当我试图在mapbox中映射时,它不会显示任何内容我认为它可能不是一个完整的geojson对象。

    3 回复  |  直到 6 年前
        1
  •  11
  •   joris    6 年前

    如果不想手动创建此dict,也可以依赖 geopandas 创建它:

    In [1]: import shapely.geometry
    
    In [2]: import geopandas
    
    In [3]: shapely_polygon = shapely.geometry.Polygon([(0, 0), (0, 1), (1, 0)])
    
    In [4]: geopandas.GeoSeries([shapely_polygon]).__geo_interface__
    Out[4]: 
    {'bbox': (0.0, 0.0, 1.0, 1.0),
     'features': [{'bbox': (0.0, 0.0, 1.0, 1.0),
       'geometry': {'coordinates': (((0.0, 0.0),
          (0.0, 1.0),
          (1.0, 0.0),
          (0.0, 0.0)),),
        'type': 'Polygon'},
       'id': '0',
       'properties': {},
       'type': 'Feature'}],
     'type': 'FeatureCollection'}
    

    (请注意,这提供了一个FeatureCollection,而不是一个单独的feature。)

    或字符串(或文件):

    In [4]: geopandas.GeoSeries([shapely_polygon]).to_json()
    Out[4]: '{"features": [{"bbox": [0.0, 0.0, 1.0, 1.0], "geometry": {"coordinates": [[[0.0, 0.0], [0.0, 1.0], [1.0, 0.0], [0.0, 0.0]]], "type": "Polygon"}, "properties": {}, "id": "0", "type": "Feature"}], "bbox": [0.0, 0.0, 1.0, 1.0], "type": "FeatureCollection"}'
    
        2
  •  2
  •   Paul Varghese    6 年前

    像这样的事情应该能起到作用:

    features = [{'type': 'Feature', 'properties': {}, 'geometry': shapely.geometry.mapping(shapelyObject)}]
    

    现在你可以试着绘制地图 features 在地图框中。 希望这有帮助。

    参考: https://gis.stackexchange.com/questions/213717/geometry-workflow-from-shapely-to-geojson

        3
  •  2
  •   MCMZL    6 年前

    要使用pandas编写标准geojson对象,您应该使用 fiona 按照 documentation

    gdf.to_file('path/to/file.geojson', driver='GeoJSON')
    

    import fiona; fiona.supported_drivers 获取完全支持的驱动程序列表

        4
  •  -1
  •   Alex Carruthers    5 年前

    shapely返回一个python dict,其中所有坐标都在元组中。您需要转换为JSON才能使用mapbox等接受它。

    json.dumps(shapely.geometry.mapping(shapelyObject))