diff options
Diffstat (limited to 'chimere/models.py')
-rw-r--r-- | chimere/models.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/chimere/models.py b/chimere/models.py index e0b401b..e99a9cf 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -905,6 +905,51 @@ class Marker(GeographicItem): return json.dumps(jsons) + @classmethod + def getGeoJSONs(self, queryset, limit_to_categories=[]): + vals = [] + q = queryset.select_related('categories').extra( + select={'json': 'ST_AsGeoJSON(point)'}).values( + 'json', 'name', 'pk', 'categories__pk') + added, cats = [], {} + for item in q.all(): + if item['pk'] in added: + continue + if limit_to_categories and \ + item["categories__pk"] not in limit_to_categories: + continue + if item['categories__pk'] not in cats: + try: + cat = SubCategory.objects.get( + available=True, pk=item['categories__pk']) + except SubCategory.DoesNotExist: + continue + cats[item['categories__pk']] = { + 'icon_path': unicode(cat.icon.image), + 'icon_hover_path': unicode(cat.hover_icon.image) + if cat.hover_icon else '', + 'icon_offset_x': cat.icon.offset_x, + 'icon_offset_y': cat.icon.offset_y, + 'icon_popup_offset_x': cat.icon.popup_offset_x, + 'icon_popup_offset_y': cat.icon.popup_offset_y, + 'category_name': cat.name} + try: + cats[item['categories__pk']].update( + {'icon_width': cat.icon.image.width, + 'icon_height': cat.icon.image.height, + }) + except IOError: + pass + dct = { + "type": "Feature", + "geometry": json.loads(item['json']), + "properties": {"pk": item['pk'], "name": item['name'], + 'key': "marker-{}".format(item['pk'])}} + dct['properties'].update(cats[item['categories__pk']]) + vals.append(dct) + added.append(item['pk']) + return vals + @property def default_category(self): # Should we select only available ones ? |