diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-02 19:00:45 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-08-02 19:00:45 +0200 |
commit | feaae2fb3ec146d0e184d13bbf38d5667a7ebca4 (patch) | |
tree | 8a51c745d7ed837ad3e28cf4aae7cc75399e38d0 /chimere/models.py | |
parent | f33f91b23551c0e77232380025148b4ba7c02cb4 (diff) | |
download | Chimère-feaae2fb3ec146d0e184d13bbf38d5667a7ebca4.tar.bz2 Chimère-feaae2fb3ec146d0e184d13bbf38d5667a7ebca4.zip |
Polygon: better management of aggregated colors
Diffstat (limited to 'chimere/models.py')
-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) |