summaryrefslogtreecommitdiff
path: root/base_geoengine/geo_helper/geo_convertion_helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'base_geoengine/geo_helper/geo_convertion_helper.py')
-rw-r--r--base_geoengine/geo_helper/geo_convertion_helper.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/base_geoengine/geo_helper/geo_convertion_helper.py b/base_geoengine/geo_helper/geo_convertion_helper.py
new file mode 100644
index 0000000..0a0d824
--- /dev/null
+++ b/base_geoengine/geo_helper/geo_convertion_helper.py
@@ -0,0 +1,38 @@
+# Copyright 2011-2012 Nicolas Bessi (Camptocamp SA)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+import logging
+
+try:
+ from shapely import wkt, wkb
+ from shapely.geometry import asShape
+ from shapely.geometry.base import BaseGeometry
+ import geojson
+except ImportError:
+ logger = logging.getLogger(__name__)
+ logger.warning("Shapely or geojson are not available in the sys path")
+
+
+def value_to_shape(value, use_wkb=False):
+ """Transforms input into a Shapely object"""
+ if not value:
+ return wkt.loads("GEOMETRYCOLLECTION EMPTY")
+ if isinstance(value, str):
+ # We try to do this before parsing json exception
+ # exception are ressource costly
+ if "{" in value:
+ geo_dict = geojson.loads(value)
+ return asShape(geo_dict)
+ elif use_wkb:
+ return wkb.loads(value, hex=True)
+ else:
+ return wkt.loads(value)
+ elif hasattr(value, "wkt"):
+ if isinstance(value, BaseGeometry):
+ return value
+ else:
+ return wkt.loads(value.wkt)
+ else:
+ raise TypeError(
+ "Write/create/search geo type must be wkt/geojson "
+ "string or must respond to wkt"
+ )