[ 
https://issues.apache.org/jira/browse/SEDONA-456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17800759#comment-17800759
 ] 

Kristin Cowalcijk commented on SEDONA-456:
------------------------------------------

The reason is that 
[SedonaMapUtils._{_}convert_to_gdf{_}_|https://github.com/apache/sedona/blob/sedona-1.5.0/python/sedona/maps/SedonaMapUtils.py#L36-L37]
 renames the geometry column to "geometry" using the {{rename}} method. This 
method won't change the geometry column of GeoDataFrame accordingly. The 
correct way of doing this is by calling the 
[{{rename_geometry}}|https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.rename_geometry.html]
 method.

> 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
>            Priority: Major
>
> 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)

Reply via email to