i'm working on little application uses geodjango find gigs @ venues nearby. here's models.py
:
from django.contrib.gis.db import models class venue(models.model): """ model venue """ name = models.charfield(max_length=200) location = models.pointfield() def __str__(self): return self.name class event(models.model): """ model event """ name = models.charfield(max_length=200) datetime = models.datetimefield() venue = models.foreignkey(venue) def __str__(self): return "%s - %s" % (self.name, self.venue.name)
now, i've managed lookup, , looks me need serialize response geojson in order render on map. however, i'm struggling done. here's current views.py
:
from django.shortcuts import render_to_response django.views.generic.edit import formview gigs.forms import lookupform gigs.models import event django.utils import timezone django.contrib.gis.geos import point django.contrib.gis.db.models.functions import distance django.template import requestcontext class lookupview(formview): form_class = lookupform def get(self, request): return render_to_response('gigs/lookup.html', requestcontext(request)) def form_valid(self, form): # data latitude = form.cleaned_data['latitude'] longitude = form.cleaned_data['longitude'] # get next week's date next_week = timezone.now() + timezone.timedelta(weeks=1) # get point location = point(latitude, longitude, srid=4326) # look events events = event.objects.filter(datetime__lte=next_week).annotate(distance=distance('venue__location', location)).order_by('distance')[0:5] # render template return render_to_response('gigs/lookupresults.html', { 'events': events })
if insert breakpoint after events:
ipdb> gigs.models import venue ipdb> django.core.serializers import serialize ipdb> venues = venue.objects.all() ipdb> serialize('geojson', venues, geometry_field='location', fields=('name',)) '{"type": "featurecollection", "crs": {"type": "name", "properties": {"name": "epsg:4326"}}, "features": [{"type": "feature", "geometry": {"type": "point", "coordinates": [77.13845850820013, 88.27032065635657]}, "properties": {"name": "venue1"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-144.48274402224723, -35.87841402981486]}, "properties": {"name": "venue2"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [15.249714163005194, -39.942840871151624]}, "properties": {"name": "venue3"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-63.376261279235095, -6.222101297964656]}, "properties": {"name": "venue4"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [153.29028611820962, -4.285826286375041]}, "properties": {"name": "venue5"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-146.08227004805758, 42.4843671723977]}, "properties": {"name": "venue6"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [149.6004493621263, 34.740389078323844]}, "properties": {"name": "venue7"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-144.38342519084884, -55.55425529324768]}, "properties": {"name": "venue8"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [83.32120247931198, 48.78215628903402]}, "properties": {"name": "venue9"}}, {"type": "feature", "geometry": {"type": "point", "coordinates": [-28.108531225500826, 35.50271671578547]}, "properties": {"name": "venue10"}}]}' ipdb> serialize('geojson', events, geometry_field='venue__location', fields=('name',)) '{"type": "featurecollection", "crs": {"type": "name", "properties": {"name": "epsg:4326"}}, "features": [{"type": "feature", "geometry": null, "properties": {"name": "event3"}}, {"type": "feature", "geometry": null, "properties": {"name": "event9"}}, {"type": "feature", "geometry": null, "properties": {"name": "event10"}}, {"type": "feature", "geometry": null, "properties": {"name": "event1"}}, {"type": "feature", "geometry": null, "properties": {"name": "event7"}}]}'
i can locations list of venues, doesn't seem work getting location venue event
model.
any idea went wrong?
hope doesn't come late, answer don't need serialize geojson render map. use if wanted there plenty of other ways.
for example, make json array each element lat,lng coordinate pair , javascript can iterate through same , add map.
Comments
Post a Comment