From c3ca0b65bc7a051429a7a5cce38c84e9983dbb0b Mon Sep 17 00:00:00 2001 From: Michael Fogleman Date: Mon, 26 Feb 2018 21:42:49 -0500 Subject: [PATCH] shapely <-> paths --- axi/__init__.py | 2 ++ axi/paths.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/axi/__init__.py b/axi/__init__.py index c16f76a..d01b1ea 100644 --- a/axi/__init__.py +++ b/axi/__init__.py @@ -9,7 +9,9 @@ from .paths import ( load_paths, path_length, paths_length, + paths_to_shapely, quadratic_path, + shapely_to_paths, simplify_path, simplify_paths, sort_paths, diff --git a/axi/paths.py b/axi/paths.py index 3086bc0..d7508d1 100644 --- a/axi/paths.py +++ b/axi/paths.py @@ -156,3 +156,26 @@ def expand_quadratics(path): else: raise Exception('invalid point: %r' % point) return result + +def paths_to_shapely(paths): + # TODO: Polygons for closed paths? + return geometry.MultiLineString(paths) + +def shapely_to_paths(g): + if isinstance(g, geometry.Point): + return [] + elif isinstance(g, geometry.LineString): + return [list(g.coords)] + elif isinstance(g, (geometry.MultiPoint, geometry.MultiLineString, geometry.MultiPolygon, geometry.collection.GeometryCollection)): + paths = [] + for x in g: + paths.extend(shapely_to_paths(x)) + return paths + elif isinstance(g, geometry.Polygon): + paths = [] + paths.append(list(g.exterior.coords)) + for interior in g.interiors: + paths.extend(shapely_to_paths(interior)) + return paths + else: + raise Exception('unhandled shapely geometry: %s' % type(g))