From d644ac614e5d2da01c16cb2a5aacc0e9efd981cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Fri, 12 May 2017 23:11:11 +0200 Subject: [PATCH] add Space.outside (for correct rendering) --- .../mapdata/migrations/0003_space_outside.py | 32 +++++++++++++++++++ src/c3nav/mapdata/models/geometry/section.py | 1 + 2 files changed, 33 insertions(+) create mode 100644 src/c3nav/mapdata/migrations/0003_space_outside.py diff --git a/src/c3nav/mapdata/migrations/0003_space_outside.py b/src/c3nav/mapdata/migrations/0003_space_outside.py new file mode 100644 index 00000000..e50dec47 --- /dev/null +++ b/src/c3nav/mapdata/migrations/0003_space_outside.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-05-12 20:59 +from __future__ import unicode_literals + +from django.db import migrations, models +from shapely.ops import cascaded_union + + +def set_space_outside(apps, schema_editor): + Section = apps.get_model('mapdata', 'Section') + for section in Section.objects.all(): + building_geometries = cascaded_union(tuple(building.geometry for building in section.buildings.all())) + for space in section.spaces.all(): + if space.geometry.intersection(building_geometries).area / space.geometry.area < 0.5: + space.outside = True + space.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('mapdata', '0002_locationredirect'), + ] + + operations = [ + migrations.AddField( + model_name='space', + name='outside', + field=models.BooleanField(default=False, verbose_name='is outside of building'), + ), + migrations.RunPython(set_space_outside), + ] diff --git a/src/c3nav/mapdata/models/geometry/section.py b/src/c3nav/mapdata/models/geometry/section.py index b37a8036..480dc409 100644 --- a/src/c3nav/mapdata/models/geometry/section.py +++ b/src/c3nav/mapdata/models/geometry/section.py @@ -62,6 +62,7 @@ class Space(SpecificLocation, LevelSectionGeometryMixin, models.Model): ) geometry = GeometryField('polygon') category = models.CharField(verbose_name=_('category'), choices=CATEGORIES, default='', max_length=16) + outside = models.BooleanField(default=False, verbose_name=_('is outside of building')) class Meta: verbose_name = _('Space')