diff options
-rw-r--r-- | chimere/models.py | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/chimere/models.py b/chimere/models.py index 2f6999e..e3fa122 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -203,6 +203,14 @@ class Color(models.Model): def __unicode__(self): return self.code + @property + def color(self): + return self.code + + @property + def inner_color(self): + return self.inner_code + class Category(models.Model): """Category of Point Of Interest (POI) @@ -268,7 +276,8 @@ class SubCategory(models.Model): Icon, verbose_name=_(u"Hover icon"), blank=True, null=True, related_name='subcat_hovered') color_theme = models.ForeignKey(ColorTheme, verbose_name=_(u"Color theme"), - blank=True, null=True) + blank=True, null=True, + related_name='subcategories') as_layer = models.BooleanField(_(u"Displayed in the layer menu"), default=False) weight_formula = models.TextField(_(u"Weight formula"), default="", @@ -1083,14 +1092,31 @@ class AggregatedPolygon(models.Model): managed = False db_table = 'chimere_aggregated_polygons' - def getGeoJSON(self, color="#000"): + def getGeoJSON(self, color="", inner_color=''): '''Return a GeoJSON string ''' - if '#' not in color: - color = '#' + color + # get colors + if not color or not inner_color: + q = Color.objects.filter( + color_theme__subcategories=self.subcategory) + if not q.count(): + if not color: + color = "rgba(0, 0, 255, 1)" + if not inner_color: + inner_color = 'rgba(255, 125, 0, 0.6)' + else: + # get the first + c = q.order_by('order').all()[0] + if not color: + color = c.color + if not inner_color: + inner_color = c.inner_color + attributes = { 'color': color, 'geometry': json.loads(self.polygon.geojson), 'type': "Feature", "properties": { + 'color': color, + 'inner_color': inner_color, 'key': "aggpoly-{}".format(self.pk), "pk": self.id, "name": u'Aggregated polygon'}} return json.dumps(attributes) |