Kristin Cowalcijk created SEDONA-456:
----------------------------------------
Summary: SedonaKepler cannot work with geopandas >= 0.13.0
correctly
Key: SEDONA-456
URL: https://issues.apache.org/jira/browse/SEDONA-456
Project: Apache Sedona
Issue Type: Bug
Affects Versions: 1.5.0
Reporter: Kristin Cowalcijk
The following exception is raised when adding a dataframe with a geometry
column not named "geometry" to the map. If the geometry column is renamed to
"geometry" before adding to the map, then everything goes well.
{code}
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
File
~/Library/Python/3.9/lib/python/site-packages/geopandas/geodataframe.py:436, in
GeoDataFrame.crs(self)
435 try:
--> 436 return self.geometry.crs
437 except AttributeError:
File ~/Library/Python/3.9/lib/python/site-packages/pandas/core/generic.py:5487,
in NDFrame.__getattr__(self, name)
5486 return self[name]
-> 5487 return object.__getattribute__(self, name)
File
~/Library/Python/3.9/lib/python/site-packages/geopandas/geodataframe.py:235, in
GeoDataFrame._get_geometry(self)
229 msg += (
230 "\nThere are no existing columns with geometry data type.
You can "
231 "add a geometry column as the active geometry column with "
232 "df.set_geometry. "
233 )
--> 235 raise AttributeError(msg)
236 return self[self._geometry_column_name]
AttributeError: You are calling a geospatial method on the GeoDataFrame, but
the active geometry column ('seg') is not present.
There are columns with geometry data type (['geometry']), and you can either
set one as the active geometry with df.set_geometry("name") or access the
column as a GeoSeries (df["name"]) and call the method directly on it.
During handling of the above exception, another exception occurred:
AttributeError Traceback (most recent call last)
Cell In[16], line 3
1 mapAll = SedonaKepler.create_map()
----> 3 SedonaKepler.add_df(mapAll, df, name="Segs")
5 mapAll
File
~/Library/Python/3.9/lib/python/site-packages/sedona/maps/SedonaKepler.py:52,
in SedonaKepler.add_df(cls, kepler_map, df, name)
44 """
45 Adds a SedonaDataFrame to a given map object.
46 :param kepler_map: Map object to add SedonaDataFrame to
(...)
49 :return: Does not return anything, adds df directly to the given map
object
50 """
51 geo_df = SedonaMapUtils.__convert_to_gdf__(df)
---> 52 kepler_map.add_data(geo_df, name=name)
File ~/Library/Python/3.9/lib/python/site-packages/keplergl/keplergl.py:140, in
KeplerGl.add_data(self, data, name)
129 def add_data(self, data, name="unnamed"):
130 ''' Send data to Voyager
131
132 Inputs:
(...)
137 keplergl.add_data(data_string, name="data_1")
138 '''
--> 140 normalized = _normalize_data(data)
141 copy = self.data.copy()
142 copy.update({name: normalized})
File ~/Library/Python/3.9/lib/python/site-packages/keplergl/keplergl.py:50, in
_normalize_data(data)
48 def _normalize_data(data):
49 if isinstance(data, pd.DataFrame):
---> 50 return _gdf_to_dict(data) if isinstance(data,
geopandas.GeoDataFrame) else _df_to_dict(data)
51 return data
File ~/Library/Python/3.9/lib/python/site-packages/keplergl/keplergl.py:34, in
_gdf_to_dict(gdf)
25 ''' Create an input dict for kepler.gl using a GeoDataFrame object
26
27 Inputs:
(...)
31 - dictionary: a dictionary variable that can be used in Kepler.gl
32 '''
33 # reproject to 4326 if needed
---> 34 if gdf.crs and not gdf.crs == 4326:
35 gdf = gdf.to_crs(4326)
37 # get name of the geometry column
38 # will cause error if data frame has no geometry column
File ~/Library/Python/3.9/lib/python/site-packages/pandas/core/generic.py:5487,
in NDFrame.__getattr__(self, name)
5480 if (
5481 name not in self._internal_names_set
5482 and name not in self._metadata
5483 and name not in self._accessors
5484 and self._info_axis._can_hold_identifiers_and_holds_name(name)
5485 ):
5486 return self[name]
-> 5487 return object.__getattribute__(self, name)
File
~/Library/Python/3.9/lib/python/site-packages/geopandas/geodataframe.py:438, in
GeoDataFrame.crs(self)
436 return self.geometry.crs
437 except AttributeError:
--> 438 raise AttributeError(
439 "The CRS attribute of a GeoDataFrame without an active "
440 "geometry column is not defined. Use GeoDataFrame.set_geometry "
441 "to set the active geometry column."
442 )
AttributeError: The CRS attribute of a GeoDataFrame without an active geometry
column is not defined. Use GeoDataFrame.set_geometry to set the active geometry
column.
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)