From 3ce5e663c5f8ca56c1ef66c1d50b9b85b39a2e9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sat, 21 Dec 2019 23:24:19 +0100 Subject: [PATCH] improve good_representative_point --- src/c3nav/mapdata/utils/geometry.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/c3nav/mapdata/utils/geometry.py b/src/c3nav/mapdata/utils/geometry.py index d4b6049c..4c34e3b8 100644 --- a/src/c3nav/mapdata/utils/geometry.py +++ b/src/c3nav/mapdata/utils/geometry.py @@ -118,8 +118,11 @@ def good_representative_point(geometry): if isinstance(geometry, Point): return geometry c = geometry.centroid - if geometry.contains(c): - return c + if not isinstance(geometry, (Polygon, MultiPolygon)): + raise ValueError + for polygon in assert_multipolygon(geometry): + if Polygon(polygon.exterior.coords).contains(c): + return c x1, y1, x2, y2 = geometry.bounds lines = (tuple(assert_multilinestring(LineString(((x1, c.y), (x2, c.y))).intersection(geometry))) + tuple(assert_multilinestring(LineString(((c.x, y1), (c.x, y2))).intersection(geometry))))