Convert geopandas shapely polygon to geojson

jchaykow picture jchaykow · Jul 23, 2018 · Viewed 26.2k times · Source

I created a circle using geopandas and it returned a shapely polygon:

POLYGON: ((...))

I want this same polygon as a geojson object. I ran across this:

shapely.geometry.mapping(shapelyObject)

which returns this:

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

But when I try to map this in mapbox it does not show anything. I think maybe it is not fully a geojson object.

Answer

joris picture joris · Jul 25, 2018

If you don't want to create this dict manually, you can also rely on geopandas creating it:

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'}

(Note that this gives a FeatureCollection and not a single feature.)

Or to a string (or file):

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"}'