summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-01-23 17:51:34 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-04-24 19:38:56 +0200
commitb829a9fc77e2eca9a0132c78b996622a4ce4df42 (patch)
tree57bcd07237986b5d007384e99797724d90b34b8a /ishtar_common/views_item.py
parent9c0b3373f9ef2681b2aac34e3d0289a28f666d92 (diff)
downloadIshtar-b829a9fc77e2eca9a0132c78b996622a4ce4df42.tar.bz2
Ishtar-b829a9fc77e2eca9a0132c78b996622a4ce4df42.zip
Map: geojson response - first display of items on map
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py41
1 files changed, 39 insertions, 2 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index e720a0437..f019fbcb3 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -12,7 +12,7 @@ import subprocess
from tempfile import NamedTemporaryFile
from django.conf import settings
-from django.contrib.gis.geos import GEOSException
+from django.contrib.gis.geos import GEOSException, GEOSGeometry
from django.contrib.staticfiles.templatetags.staticfiles import static
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
@@ -991,6 +991,41 @@ def _format_val(val):
return unicode(val)
+def _format_geojson(rows):
+ data = {
+ 'type': 'FeatureCollection',
+ 'crs': {
+ 'type': 'name',
+ 'properties': {
+ 'name': 'EPSG:4326'
+ }
+ },
+ 'features': [],
+ 'no-geo': []
+ }
+ if not rows:
+ return data
+ geo_attr, name_attr = None, None
+ for attr in rows[0]:
+ if attr.endswith('point_2d'):
+ geo_attr = attr
+ if attr in ['name', 'cached_label']:
+ name_attr = attr
+ if not geo_attr or not name_attr:
+ return data
+ for row in rows:
+ feat = {'name': row[name_attr], 'id': row['id']}
+ if not row[geo_attr]:
+ data['no-geo'].append(feat)
+ continue
+ feature = {'type': 'Feature'}
+ feature['properties'] = feat
+ point = GEOSGeometry(row[geo_attr])
+ feature['geometry'] = json.loads(point.json)
+ data['features'].append(feature)
+ return data
+
+
DEFAULT_ROW_NUMBER = 10
# length is used by ajax DataTables requests
EXCLUDED_FIELDS = ['length']
@@ -1608,7 +1643,9 @@ def get_item(model, func_name, default_name, extra_request_keys=None,
elif 'name' in res:
res['value'] = res.pop('name')
rows.append(res)
- if full == 'shortcut':
+ if data_type == 'json-map':
+ data = json.dumps(_format_geojson(rows))
+ elif full == 'shortcut':
data = json.dumps(rows)
else:
data = json.dumps({