Skip to content

Commit

Permalink
basic implementation of '/map/contains'
Browse files Browse the repository at this point in the history
  • Loading branch information
JoeGermuska committed Sep 3, 2011
1 parent a8b1ea2 commit 5f8476e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
1 change: 1 addition & 0 deletions censusweb/api/urls.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
url(r'^data/(?P<geoids>[,\d]+)\.html$', views.generic_view, { "template": "data.html" }, name="data"), url(r'^data/(?P<geoids>[,\d]+)\.html$', views.generic_view, { "template": "data.html" }, name="data"),
url(r'^data/bulkdata.html$', views.generic_view, { "template": "bulkdata.html" }, name="bulkdata"), url(r'^data/bulkdata.html$', views.generic_view, { "template": "bulkdata.html" }, name="bulkdata"),
url(r'^map/(?P<geoids>[,\d]+)\.html$', views.generic_view, { "template": "map.html" }, name="map"), url(r'^map/(?P<geoids>[,\d]+)\.html$', views.generic_view, { "template": "map.html" }, name="map"),
url(r'^map/contains$', views.map_contains, name="map_contains"),
url(r'^docs/json.html$', views.generic_view, { "template": "docs/json.html" }, name="json-doc"), url(r'^docs/json.html$', views.generic_view, { "template": "docs/json.html" }, name="json-doc"),
url(r'^docs/boundary.html$', views.generic_view, { "template": "docs/boundary.html" }, name="boundary-documentation"), url(r'^docs/boundary.html$', views.generic_view, { "template": "docs/boundary.html" }, name="boundary-documentation"),
url(r'^util/create_table/(?P<aggregate>(all_files|all_tables))\.sql$', views.generate_sql, name="generate_sql"), # order matters. keep this first to catch only numbers before tables url(r'^util/create_table/(?P<aggregate>(all_files|all_tables))\.sql$', views.generate_sql, name="generate_sql"), # order matters. keep this first to catch only numbers before tables
Expand Down
28 changes: 26 additions & 2 deletions censusweb/api/views.py
Original file line number Original file line Diff line number Diff line change
@@ -1,13 +1,15 @@
import simplejson import simplejson


from django.conf import settings from django.conf import settings
from django.http import HttpResponse, HttpResponseNotFound from django.http import HttpResponse, HttpResponseNotFound, HttpResponseRedirect


from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz
from django.contrib.gis.geos import Point
from django.template import RequestContext, Template, Context from django.template import RequestContext, Template, Context
from django.core.urlresolvers import reverse


from boundaryservice.models import Boundary from boundaryservice.models import Boundary,BoundarySet


import csv import csv
import help_text import help_text
Expand All @@ -17,6 +19,8 @@


DATA_ALTERNATIVES = ['2000', '2010', 'delta', 'pct_change'] DATA_ALTERNATIVES = ['2000', '2010', 'delta', 'pct_change']


BOUNDARY_TYPES = [x[0] for x in BoundarySet.objects.values_list('slug').distinct()]

def homepage(request): def homepage(request):
return render_to_response('homepage.html', { return render_to_response('homepage.html', {
'help_text': help_text, 'help_text': help_text,
Expand Down Expand Up @@ -251,3 +255,23 @@ def generate_sql(request, file_ids=None, table_ids=None, aggregate=None):


return HttpResponseNotFound() return HttpResponseNotFound()


def map_contains(request):
point = request.REQUEST.get('point',None)
try:
lat,lng = point.split(',',1)
point = Point(float(lat),float(lng))
except:
raise TypeError("A point must be provided as a comma-separated string, 'lat,lng'")

types = request.REQUEST.get('types',[])
if types:
types = [x for x in types.split(',') if x in BOUNDARY_TYPES]
if not types: raise ValueError("None of the specified types are valid. Use one or more of (%s) separated by commas." % ','.join(BOUNDARY_TYPES))
else:
types = BOUNDARY_TYPES

boundaries = Boundary.objects.filter(shape__contains=point,set__slug__in=types)
geoids = sorted(x[0] for x in boundaries.values_list('external_id'))
geoids = ','.join(geoids)
return HttpResponseRedirect(reverse('map',kwargs={'geoids': geoids}))

0 comments on commit 5f8476e

Please sign in to comment.