summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2014-06-05 15:13:31 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2014-06-05 15:13:31 +0200
commit558f510463130937d71c3acc8242fd2058f02fa2 (patch)
treebcbda8ba455871750077e2e633d67b9dbef44e83
parent855825e8034a441bd947429b564d43dc92a43e3f (diff)
downloadChimère-558f510463130937d71c3acc8242fd2058f02fa2.tar.bz2
Chimère-558f510463130937d71c3acc8242fd2058f02fa2.zip
Improve performance of getGeoObjects for large request
One supplementary request was done for each marker! To be done: check and improve routes.
-rw-r--r--chimere/models.py15
-rw-r--r--chimere/views.py9
2 files changed, 18 insertions, 6 deletions
diff --git a/chimere/models.py b/chimere/models.py
index ed84124..8446a68 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -624,10 +624,23 @@ class Marker(GeographicItem):
val = values[unicode(propertymodel.id)]
self.setProperty(propertymodel, val)
+ PROPERTIES_KEYS = ['point', 'pk', 'name', 'weight']
+ @classmethod
+ def _getJson(cls, values, base_dct={"properties":{}}):
+ item = base_dct.copy()
+ item["geometry"] = {"type": "Point",
+ "coordinates": [values['point'].x,
+ values['point'].y]}
+ item["properties"]['pk'] = values['pk']
+ item["properties"]['name'] = values['name']
+ if values['weight']:
+ item["properties"]['weight'] = values['weight']
+ return item
+
def _getItems(self, base_dct={"properties":{}}):
'''Return a dict representation for json
'''
- item = base_dct
+ item = base_dct.copy()
item["geometry"] = {"type": "Point",
"coordinates": [ self.point.x, self.point.y ]
}
diff --git a/chimere/views.py b/chimere/views.py
index d10e8ec..997079f 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2008-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
+# Copyright (C) 2008-2014 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet>
#
# RSS : Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>,
# Samuel Renard <renard.samuel_AT_gmailDOTcom>,
@@ -667,10 +667,9 @@ def getGeoObjects(request, map_name, category_ids, status):
'icon_height':cat.icon.image.height,
'category_name':cat.name}
}
- for obj in query.filter(categories__pk=category_id).all():
- dct = base_dct.copy()
- dct['properties'] = base_dct['properties'].copy()
- jsons.append(obj._getItems(base_dct=dct))
+ for values in query.filter(categories__pk=category_id).values(
+ 'point', 'pk', 'name', 'weight'):
+ jsons.append(Marker._getJson(values, base_dct.copy()))
if not jsons:
return HttpResponse('no results')
data = {"type": "FeatureCollection", "features":jsons}