introducing cut_polygon_with_line() for better stair/altitude processing

This commit is contained in:
Laura Klünder 2017-11-13 01:25:08 +01:00
parent 2786b397de
commit 88fc75022e
2 changed files with 90 additions and 3 deletions

View file

@ -19,7 +19,8 @@ from c3nav.mapdata.models import Level
from c3nav.mapdata.models.access import AccessRestrictionMixin
from c3nav.mapdata.models.geometry.base import GeometryMixin
from c3nav.mapdata.models.locations import SpecificLocation
from c3nav.mapdata.utils.geometry import assert_multilinestring, assert_multipolygon, clean_geometry
from c3nav.mapdata.utils.geometry import (assert_multilinestring, assert_multipolygon, clean_geometry,
cut_polygon_with_line)
class LevelGeometryMixin(GeometryMixin):
@ -193,7 +194,7 @@ class AltitudeArea(LevelGeometryMixin, models.Model):
if not area.geometry_prep.intersects(stair):
continue
divided = assert_multipolygon(area.geometry.difference(stair.buffer(0.0001)))
divided = assert_multipolygon(cut_polygon_with_line(area.geometry, stair))
if len(divided) > 2:
raise ValueError
area.geometry = divided[0]