You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2024/02/01 06:26:31 UTC
(sedona) branch master updated: [SEDONA476] Expose kepler & pydeck as extras (#1229)
This is an automated email from the ASF dual-hosted git repository.
jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git
The following commit(s) were added to refs/heads/master by this push:
new 08e8a1a7c [SEDONA476] Expose kepler & pydeck as extras (#1229)
08e8a1a7c is described below
commit 08e8a1a7c5df59f4e21d206dc82bafe5029b18ec
Author: Guilhem de Viry <gd...@mytraffic.fr>
AuthorDate: Thu Feb 1 07:26:25 2024 +0100
[SEDONA476] Expose kepler & pydeck as extras (#1229)
* feat(python): expose kepler & pydeck optional dependencies in extras
* feat(python): add `all` extras option
* docs: update sql tutorial with new map extras
---
docs/tutorial/sql.md | 12 ++++--------
python/sedona/maps/SedonaKepler.py | 8 +++++++-
python/sedona/maps/SedonaPyDeck.py | 20 +++++++++++++++++++-
python/sedona/spark/__init__.py | 9 +--------
python/setup.py | 7 ++++++-
5 files changed, 37 insertions(+), 19 deletions(-)
diff --git a/docs/tutorial/sql.md b/docs/tutorial/sql.md
index 61f315a3f..4e97d7f12 100644
--- a/docs/tutorial/sql.md
+++ b/docs/tutorial/sql.md
@@ -580,11 +580,9 @@ Spatial query results can be visualized in a Jupyter lab/notebook environment us
SedonaPyDeck exposes APIs to create interactive map visualizations using [pydeck](https://pydeck.gl/index.html#) based on [deck.gl](https://deck.gl/)
!!!Note
- To use SedonaPyDeck, GeoPandas and PyDeck must be installed. We recommend the following installation commands:
+ To use SedonaPyDeck, install sedona with the `pydeck-map` extra:
```
- pip install 'pandas<=1.3.5'
- pip install 'geopandas<=0.10.2'
- pip install pydeck==0.8.0
+ pip install sedona[pydeck-map]
```
The following tutorial showcases the various maps that can be created using SedonaPyDeck, the datasets used to create these maps are publicly available.
@@ -658,11 +656,9 @@ Spatial query results can be visualized in a Jupyter lab/notebook environment us
SedonaKepler exposes APIs to create interactive and customizable map visualizations using [KeplerGl](https://kepler.gl/).
!!!Note
- To use SedonaKepler, GeoPandas and KeplerGL must be installed. We recommend the following installation commands:
+ To use SedonaKepler, install sedona with the `kepler-map` extra:
```
- pip install 'pandas<=1.3.5'
- pip install 'geopandas<=0.10.2'
- pip install keplergl==0.3.2
+ pip install sedona[kepler-map]
```
This tutorial showcases how simple it is to instantly visualize geospatial data using SedonaKepler.
diff --git a/python/sedona/maps/SedonaKepler.py b/python/sedona/maps/SedonaKepler.py
index 21f754261..a8cf7b5f0 100644
--- a/python/sedona/maps/SedonaKepler.py
+++ b/python/sedona/maps/SedonaKepler.py
@@ -15,7 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-from keplergl import KeplerGl
from sedona.maps.SedonaMapUtils import SedonaMapUtils
@@ -30,6 +29,13 @@ class SedonaKepler:
dataframe, if a df is passed with no name, a default name of 'unnamed' is set for it.
param config: [Optional] A map config to be applied to the rendered map :return: A map object
"""
+
+ try:
+ from keplergl import KeplerGl
+ except ImportError:
+ msg = "Install sedona[kepler-map] to convert sedona dataframes to kepler maps."
+ raise ImportError(msg) from None
+
kepler_map = KeplerGl()
if df is not None:
SedonaKepler.add_df(kepler_map, df, name)
diff --git a/python/sedona/maps/SedonaPyDeck.py b/python/sedona/maps/SedonaPyDeck.py
index 154b8a4cd..b6062e67b 100644
--- a/python/sedona/maps/SedonaPyDeck.py
+++ b/python/sedona/maps/SedonaPyDeck.py
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-import pydeck as pdk
+from types import ModuleType
from sedona.maps.SedonaMapUtils import SedonaMapUtils
@@ -37,6 +37,7 @@ class SedonaPyDeck:
:param map_provider:
:return: A pydeck Map object with choropleth layer added:
"""
+ pdk = _try_import_pydeck()
if initial_view_state is None:
gdf = SedonaPyDeck._prepare_df_(df, add_coords=True)
@@ -79,6 +80,8 @@ class SedonaPyDeck:
:param map_provider: optional map_provider of the pydeck map
:return: A pydeck map with a GeoJsonLayer map added
"""
+ pdk = _try_import_pydeck()
+
geometry_col = SedonaMapUtils.__get_geometry_col__(df)
gdf = SedonaPyDeck._prepare_df_(df, geometry_col=geometry_col)
geom_type = gdf[geometry_col][0].geom_type
@@ -116,6 +119,8 @@ class SedonaPyDeck:
:param map_provider: optional map_provider to be added to the pydeck map
:return: A pydeck map object with a scatterplot layer added
"""
+ pdk = _try_import_pydeck()
+
gdf = SedonaPyDeck._prepare_df_(df, add_coords=True)
layer = pdk.Layer(
"ScatterplotLayer",
@@ -152,6 +157,7 @@ class SedonaPyDeck:
:param map_provider: Optional map_provider for the pydeck map
:return: A pydeck map with a heatmap layer added
"""
+ pdk = _try_import_pydeck()
gdf = SedonaPyDeck._prepare_df_(df, add_coords=True)
@@ -239,6 +245,7 @@ class SedonaPyDeck:
@classmethod
def _create_fat_layer_(cls, gdf, fill_color, line_color, elevation_col):
+ pdk = _try_import_pydeck()
layer = pdk.Layer(
'GeoJsonLayer', # `type` positional argument is here
data=gdf,
@@ -254,3 +261,14 @@ class SedonaPyDeck:
)
return layer
+
+
+def _try_import_pydeck() -> ModuleType:
+ try:
+ import pydeck as pdk
+
+ except ImportError:
+ msg = "Install sedona[pydeck-map] to convert sedona dataframes to pydeck maps."
+ raise ImportError(msg) from None
+
+ return pdk
diff --git a/python/sedona/spark/__init__.py b/python/sedona/spark/__init__.py
index 73c4b2d4a..c55f67a11 100644
--- a/python/sedona/spark/__init__.py
+++ b/python/sedona/spark/__init__.py
@@ -41,11 +41,4 @@ from sedona.utils import SedonaKryoRegistrator
from sedona.register import SedonaRegistrator
from sedona.spark.SedonaContext import SedonaContext
from sedona.raster_utils.SedonaUtils import SedonaUtils
-try:
- from sedona.maps.SedonaKepler import SedonaKepler
-except:
- print('Skipping SedonaKepler import, verify if keplergl is installed')
-try:
- from sedona.maps.SedonaPyDeck import SedonaPyDeck
-except:
- print('Skipping SedonaPyDeck import, verify if pydeck is installed')
+from sedona.maps import SedonaKepler, SedonaPyDeck
diff --git a/python/setup.py b/python/setup.py
index a6bc7b2c9..7576957d0 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -53,7 +53,12 @@ setup(
long_description_content_type="text/markdown",
python_requires='>=3.6',
install_requires=['attrs', "shapely>=1.7.0"],
- extras_require={"spark": ['pyspark>=2.3.0']},
+ extras_require={
+ "spark": ["pyspark>=2.3.0"],
+ "pydeck-map": ["pandas<=1.3.5", "geopandas<=0.10.2", "pydeck==0.8.0"],
+ "kepler-map": ["pandas<=1.3.5", "geopandas<=0.10.2", "keplergl==0.3.2"],
+ "all": ["pyspark>=2.3.0", "pandas<=1.3.5", "geopandas<=0.10.2","pydeck==0.8.0", "keplergl==0.3.2"],
+ },
project_urls={
'Documentation': 'https://sedona.apache.org',
'Source code': 'https://github.com/apache/sedona',