[GIS] Write GeoJson into a .geojson file with Python

file formatsgeojsonpython

I want to write a geosjon object with the type <class 'geojson.feature.Feature'> into a .geosjon file. Therefore I tried to use

with open(test.geosjon, 'w') as outfile:
     geojson.dump(geosjon_geometries, outfile)

But i get the error TypeError: coercing to Unicode: need string or buffer, tuple found
I figured out that with this function a dict is needed to write it into a geosjon file. Is there another possibility to write a geojson feature in a file?

The function looks like:

def write_json(self, features):
    # feature is a shapely geometry feature
    geom_in_geojson = geojson.Feature(geometry=features, properties={})
    tmp_file = tempfile.mkstemp(suffix='.geojson')
    with open(tmp_file, 'w') as outfile:
        geojson.dump(geom_in_geojson, outfile)
    return tmp_file

The input is a shapely geometry, e.g. MultiLineString or LineString

Best Answer

Dumping a list of features directly does not create a valid GeoJSON file.

To create valid GeoJSON:

  1. Create a list of features (where each feature has geometry and optional properties)
  2. Create a collection (e.g. FeatureCollection) with those features
  3. Dump the collection to a file.

e.g.

from geojson import Point, Feature, FeatureCollection, dump

point = Point((-115.81, 37.24))

features = []
features.append(Feature(geometry=point, properties={"country": "Spain"}))

# add more features...
# features.append(...)

feature_collection = FeatureCollection(features)

with open('myfile.geojson', 'w') as f:
   dump(feature_collection, f)

Output:

{
    "type": "FeatureCollection",
    "features": [{
        "geometry": {
            "type": "Point",
            "coordinates": [-115.81, 37.24]
        },
        "type": "Feature",
        "properties": {
            "country": "Spain"
        }
    }]
}
Related Question