1

I am trying to apply the method to_file of a Geopandas DataFrame.

My DataFrame contains a column Polygon, a column Point, a string and float columns.

Here the output of the describe method:

<class 'geopandas.geodataframe.GeoDataFrame'>
RangeIndex: 1332 entries, 0 to 1331
Data columns (total 7 columns):
ID 1332 non-null object
geometry 1332 non-null object
centroid 1332 non-null object
epsg4326_longitude 1332 non-null float64
epsg4326_latitude 1332 non-null float64
epsg3857_x 1332 non-null float64
epsg3857_y 1332 non-null float64
dtypes: float64(4), object(3)
memory usage: 72.9+ KB

The specific types are:

Polygon: shapely.geometry.polygon.Polygon
Point: shapely.geometry.point.Point
String: str
Floats: numpy.float64

When I try apply the method to_file i have the following exception:

geo_grid_df.to_file(filename='grid_50km.geojson', driver='GeoJSON')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-78-d1eb792e5885> in <module>()
----> 1 geo_grid_df.to_file(filename='grid_france_50km.geojson', driver='GeoJSON')
C:\ProgramData\Anaconda3\lib\site-packages\geopandas\geodataframe.py in to_file(self, filename, driver, schema, **kwargs)
 411 """
 412 from geopandas.io.file import to_file
--> 413 to_file(self, filename, driver, schema, **kwargs)
 414 
 415 def to_crs(self, crs=None, epsg=None, inplace=False):
C:\ProgramData\Anaconda3\lib\site-packages\geopandas\io\file.py in to_file(df, filename, driver, schema, **kwargs)
 109 with fiona.open(filename, 'w', driver=driver, crs=df.crs,
 110 schema=schema, **kwargs) as colxn:
--> 111 colxn.writerecords(df.iterfeatures())
 112 
 113 
C:\ProgramData\Anaconda3\lib\site-packages\fiona\collection.py in writerecords(self, records)
 333 if self.mode not in ('a', 'w'):
 334 raise IOError("collection not open for writing")
--> 335 self.session.writerecs(records, self)
 336 self._len = self.session.get_length()
 337 self._bounds = self.session.get_extent()
fiona\ogrext.pyx in fiona.ogrext.WritingSession.writerecs()
fiona\ogrext.pyx in fiona.ogrext.OGRFeatureBuilder.build()
ValueError: Invalid field type <class 'shapely.geometry.point.Point'>

Any ideas?

pandas: 0.20.3 | geopandas: 0.4.0 | fiona: 1.7.10

asked Jan 28, 2019 at 11:12
3
  • I don't think you can store a point object in the properties (attributes) of a polygon feature. Commented Jan 28, 2019 at 11:22
  • I drooped the column with Points objects (centroid) and I don't have the exception anymore. Then I dropped the column with Polygons objects (geometry) and I still have the exception. Seems like the only field where you are able to put geographical objects is under "geometry". So how can we have both geographical information exported in a single file? Commented Jan 28, 2019 at 12:58
  • Even if GeoPandas would support multiple geometry columns, many geospatial file formats (including GeoJSON) don't support storing multiple geometry columns. One option is to convert the points to a column of x and y coordinates, so you can store them as integers. Commented Jan 28, 2019 at 14:30

1 Answer 1

2

Seems like a Geopandas DataFrame has only ONE column geometry [check it here]

So dumping a Geo DataFrame with two columns or more columns with geometry objects is not possible.

I was able to dump my GeoJSON without the Points objects column:

geo_grid_df.drop(labels='centroid', axis=1).to_file(filename='grid_50km.geojson', driver='GeoJSON')

And without the polygons in another one, after setting the points as my new geometry reference.

geo_grid_df.drop(labels='geometry', axis=1).set_geometry('centroid', crs={'init': 'epsg:4326'}).to_file(filename='grid_50km_centroids.geojson', driver='GeoJSON')
answered Jan 28, 2019 at 14:08

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.