grandlyon: generate geojson on the fly
This commit is contained in:
parent
ac52134db5
commit
ded8b06699
|
@ -1,8 +1,16 @@
|
|||
import inspect
|
||||
import json
|
||||
import os
|
||||
from quixote import get_publisher
|
||||
|
||||
from pyproj import Proj, transform, Geod
|
||||
|
||||
from qommon import misc
|
||||
from qommon.storage import Contains
|
||||
from wcs.wf.geolocate import GeolocateWorkflowStatusItem
|
||||
|
||||
geod = Geod(ellps='WGS84')
|
||||
|
||||
formdef = form_objects.formdef
|
||||
|
||||
result = False
|
||||
coords = vars().get('form_var_carte')
|
||||
if not coords and 'form_var_numero' in vars():
|
||||
|
@ -14,12 +22,15 @@ if not coords and 'form_var_numero' in vars():
|
|||
if coords:
|
||||
lat, lon = coords.split(';')
|
||||
lat, lon = float(lat), float(lon)
|
||||
lat1, lat2 = lat - 0.008, lat + 0.008
|
||||
lon1, lon2 = lon - 0.006, lon + 0.006
|
||||
|
||||
geojson_file = os.path.join(get_publisher().app_dir, 'geojsons', form_slug + '.json')
|
||||
for feature in json.load(open(geojson_file))['features']:
|
||||
lon, lat = feature['geometry']['coordinates']
|
||||
if lon > lon1 and lon < lon2 and lat > lat1 and lat < lat2:
|
||||
applied_filters = ['wf-%s' % x.id for x in formdef.workflow.get_not_endpoint_status()]
|
||||
formdatas = formdef.data_class().select([Contains('status', applied_filters)])
|
||||
for formdata in formdatas:
|
||||
if not formdata.geolocations:
|
||||
continue
|
||||
coords = misc.normalize_geolocation(formdata.geolocations['base'])
|
||||
|
||||
distance = geod.inv(coords['lon'], coords['lat'], lon, lat)[2]
|
||||
if distance < 750:
|
||||
result = True
|
||||
break
|
||||
|
|
|
@ -1,8 +1,20 @@
|
|||
from wcs.wf.geolocate import GeolocateWorkflowStatusItem
|
||||
import inspect
|
||||
import json
|
||||
import time
|
||||
|
||||
from pyproj import Proj, transform, Geod
|
||||
|
||||
from qommon import misc
|
||||
from qommon.storage import Contains
|
||||
from qommon.form import MapWidget
|
||||
from wcs.wf.geolocate import GeolocateWorkflowStatusItem
|
||||
|
||||
geod = Geod(ellps='WGS84')
|
||||
|
||||
result = ''
|
||||
|
||||
formdef = form_objects.formdef
|
||||
|
||||
coords = vars().get('form_var_carte')
|
||||
|
||||
if not coords and 'form_var_numero' in vars():
|
||||
|
@ -13,11 +25,40 @@ if not coords and 'form_var_numero' in vars():
|
|||
coords = '%(lat)s;%(lon)s' % coords
|
||||
|
||||
if coords:
|
||||
print 'similar map'
|
||||
lat, lon = coords.split(';')
|
||||
lat, lon = float(lat), float(lon)
|
||||
map_widget = MapWidget('geo', readonly=True, value=coords,
|
||||
initial_zoom=16)
|
||||
|
||||
features = []
|
||||
applied_filters = ['wf-%s' % x.id for x in formdef.workflow.get_not_endpoint_status()]
|
||||
formdatas = formdef.data_class().select([Contains('status', applied_filters)])
|
||||
for formdata in formdatas:
|
||||
if not formdata.geolocations:
|
||||
continue
|
||||
coords = misc.normalize_geolocation(formdata.geolocations['base'])
|
||||
|
||||
distance = geod.inv(coords['lon'], coords['lat'], lon, lat)[2]
|
||||
if distance < 750:
|
||||
feature = {
|
||||
'type': 'Feature',
|
||||
'properties': {},
|
||||
'geometry': {
|
||||
'type': 'Point',
|
||||
'coordinates': [coords['lon'], coords['lat']],
|
||||
}
|
||||
}
|
||||
for field in formdef.fields:
|
||||
if field.varname in ('numero', 'voie', 'commune', 'message', 'type_probleme'):
|
||||
feature['properties'][field.varname] = formdata.data.get(field.id)
|
||||
feature['properties']['datetime'] = time.strftime('%d/%m/%Y %H:%M', formdata.receipt_time)
|
||||
feature['properties']['reference'] = '%s:%s' % (formdef.url_name, formdata.id)
|
||||
features.append(feature)
|
||||
|
||||
result = '''
|
||||
<link href="%s/static/css/combo.map.css" type="text/css" media="all" rel="stylesheet">
|
||||
<div id="similar" data-geojson-url="%s">%s</div>
|
||||
<div id="similar"><script>geojson_data = %s;</script>%s</div>
|
||||
''' % (portal_user_url,
|
||||
'/geojsons/%s.json' % form_slug,
|
||||
json.dumps(features),
|
||||
map_widget.render())
|
||||
|
|
Loading…
Reference in New Issue