team-3/src/c3nav/mapdata/models/geometry/section.py

92 lines
2.7 KiB
Python
Raw Normal View History

from collections import OrderedDict
2017-05-08 21:55:45 +02:00
from django.db import models
from django.utils.translation import ugettext_lazy as _
from c3nav.mapdata.fields import GeometryField
2017-05-08 16:40:22 +02:00
from c3nav.mapdata.models.geometry.base import GeometryMixin
LEVEL_FEATURE_TYPES = OrderedDict()
2017-05-08 16:40:22 +02:00
class SectionGeometryMixin(GeometryMixin):
def get_geojson_properties(self):
result = super().get_geojson_properties()
2017-05-07 12:06:13 +02:00
result['section'] = self.section.id
return result
2017-05-08 16:40:22 +02:00
class Building(SectionGeometryMixin, models.Model):
"""
The outline of a building on a specific level
"""
2017-05-08 16:40:22 +02:00
section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section'))
geometry = GeometryField('polygon')
class Meta:
verbose_name = _('Building')
verbose_name_plural = _('Buildings')
default_related_name = 'buildings'
2017-05-08 16:40:22 +02:00
class Space(SectionGeometryMixin, models.Model):
"""
2017-05-06 17:40:06 +02:00
An accessible space. Shouldn't overlap.
"""
2017-05-08 16:40:22 +02:00
section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section'))
geometry = GeometryField('polygon')
CATEGORIES = (
('', _('normal')),
('stairs', _('stairs')),
('escalator', _('escalator')),
('elevator', _('elevator')),
)
LAYERS = (
('', _('normal')),
('upper', _('upper')),
('lowerr', _('lower')),
)
2017-05-06 17:50:55 +02:00
public = models.BooleanField(verbose_name=_('public'), default=True)
category = models.CharField(verbose_name=_('category'), choices=CATEGORIES, max_length=16)
layer = models.CharField(verbose_name=_('layer'), choices=LAYERS, max_length=16)
class Meta:
verbose_name = _('Area')
verbose_name_plural = _('Areas')
default_related_name = 'areas'
def get_geojson_properties(self):
result = super().get_geojson_properties()
result['category'] = self.category
result['layer'] = self.layer
result['public'] = self.public
return result
2017-05-08 16:40:22 +02:00
class Door(SectionGeometryMixin, models.Model):
"""
A connection between two rooms
"""
2017-05-08 16:40:22 +02:00
section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section'))
geometry = GeometryField('polygon')
class Meta:
verbose_name = _('Door')
verbose_name_plural = _('Doors')
default_related_name = 'doors'
2017-05-08 16:40:22 +02:00
class Hole(SectionGeometryMixin, models.Model):
"""
A hole in the ground of a room, e.g. for stairs.
"""
2017-05-08 16:40:22 +02:00
section = models.ForeignKey('mapdata.Section', on_delete=models.CASCADE, verbose_name=_('section'))
geometry = GeometryField('polygon')
class Meta:
verbose_name = _('Hole')
verbose_name_plural = _('Holes')
default_related_name = 'holes'