Repository: geopandas/geopandas

Issue:
ENH: check for minimum version of folium
I've found that we require some recent version of folium with `explore`. I haven't yet checked which is needed but 0.8.3 that comes pre-installed in Google Colab is too old and raises an error. We should capture that and raise an informative error, instead of existing coming from folium (something about `missing 1 required positional argument: “location”`).

In case someone stumbles upon this issue trying to resolve Google Colab, just update folium.
```
!pip install folium -U
```

Discussion:
fisaenko: Need to cover new lines with tests

Patch:
diff --git a/geopandas/explore.py b/geopandas/explore.py
index 652dd6dd..ae2bd038 100644
--- a/geopandas/explore.py
+++ b/geopandas/explore.py
@@ -204,6 +204,13 @@ def _explore(
     highlight_kwds : dict (default {})
         Style to be passed to folium highlight_function. Uses the same keywords
         as ``style_kwds``. When empty, defaults to ``{"fillOpacity": 0.75}``.
+    missing_kwds : dict (default {})
+        Additional style for missing values:
+
+        color : str
+            Color of missing values. Defaults to ``None``, which uses Folium's default.
+        label : str (default "NaN")
+            Legend entry for missing values.
     tooltip_kwds : dict (default {})
         Additional keywords to be passed to :class:`folium.features.GeoJsonTooltip`,
         e.g. ``aliases``, ``labels``, or ``sticky``.
@@ -296,12 +303,16 @@ def _explore(
         else:
             from matplotlib import cm
 
+        # check for minimum version of folium
+        if Version(folium.__version__) < Version("0.12.0"):
+            raise ImportError
+
     except (ImportError, ModuleNotFoundError):
         raise ImportError(
-            "The 'folium', 'matplotlib' and 'mapclassify' packages are required for "
-            "'explore()'. You can install them using "
-            "'conda install -c conda-forge folium matplotlib mapclassify' "
-            "or 'pip install folium matplotlib mapclassify'."
+            "The 'folium>=0.12', 'matplotlib' and 'mapclassify' packages "
+            "are required for 'explore()'. You can install them using "
+            "'conda install -c conda-forge \"folium>=0.12\" matplotlib mapclassify' "
+            "or 'pip install \"folium>=0.12\" matplotlib mapclassify'."
         )
 
     # xyservices is an optional dependency
diff --git a/geopandas/io/arrow.py b/geopandas/io/arrow.py
index e684dcf1..ad9ee745 100644
--- a/geopandas/io/arrow.py
+++ b/geopandas/io/arrow.py
@@ -122,6 +122,9 @@ def _create_metadata(
     schema_version : {'0.1.0', '0.4.0', '1.0.0-beta.1', '1.0.0', '1.1.0', None}
         GeoParquet specification version; if not provided will default to
         latest supported version.
+    geometry_encoding : dict, default None
+        GeoParquet encoding per geometry column.
+        Defaults to "WKB" for columns that are not present in the dictionary.
     write_covering_bbox : bool, default False
         Writes the bounding box column for each row entry with column
         name 'bbox'. Writing a bbox column can be computationally
@@ -166,7 +169,11 @@ def _create_metadata(
                 _remove_id_from_member_of_ensembles(crs)
 
         column_metadata[col] = {
-            "encoding": geometry_encoding[col],
+            "encoding": (
+                geometry_encoding[col]
+                if geometry_encoding and col in geometry_encoding
+                else "WKB"
+            ),
             "crs": crs,
             geometry_types_name: geometry_types,
         }


Test patch:
diff --git a/geopandas/io/tests/test_arrow.py b/geopandas/io/tests/test_arrow.py
index c10220a1..2a4e9338 100644
--- a/geopandas/io/tests/test_arrow.py
+++ b/geopandas/io/tests/test_arrow.py
@@ -94,6 +94,11 @@ def test_create_metadata(naturalearth_lowres):
     # specifying non-WKB encoding sets default schema to 1.1.0
     metadata = _create_metadata(df, geometry_encoding={"geometry": "point"})
     assert metadata["version"] == "1.1.0"
+    assert metadata["columns"]["geometry"]["encoding"] == "point"
+
+    # check that providing no geometry encoding defaults to WKB
+    metadata = _create_metadata(df)
+    assert metadata["columns"]["geometry"]["encoding"] == "WKB"
 
 
 def test_create_metadata_with_z_geometries():