def test_check_bounds(self): self.assertIsNone(check_bounds('100', '100', '100', '')) self.assertIsNone(check_bounds('-100', '100', '200', 'asdf')) expected_bounds = (float('10.0'), float('40.1234'), float('20.20'), float('-10.123456')) actual_bounds = check_bounds('10.0', '-10.123456', '20.20', '40.1234') self.assertEqual(expected_bounds, actual_bounds)
def get_censustract_geos(request): northEastLat = request.GET.get('neLat') northEastLon = request.GET.get('neLon') southWestLat = request.GET.get('swLat') southWestLon = request.GET.get('swLon') metro = request.GET.get('metro') geo_type = request.GET.get('geoType') geos = [] if northEastLat or northEastLon or southWestLat or southWestLon: bounds = check_bounds(northEastLat, northEastLon, southWestLat, southWestLon) if bounds: if geo_type == "msa": #*bounds expands the set from check_bounds msas = get_geos_by_bounds_and_type(*bounds, metro=True) geos = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, cbsa__in=msas.values_list('geoid', flat=True)) else: geos = get_geos_by_bounds_and_type(*bounds) else: raise Http404("Invalid bounds") elif metro: msa = get_object_or_404(Geo, geo_type=Geo.METRO_TYPE, geoid=metro) geos = msa.get_censustract_geos_by_msa() return geos
def get_censustract_geos(request): northEastLat = request.GET.get('neLat') northEastLon = request.GET.get('neLon') southWestLat = request.GET.get('swLat') southWestLon = request.GET.get('swLon') year = request.GET.get('year') metro = request.GET.get('metro') geo_type = request.GET.get('geoType') geos = [] if northEastLat or northEastLon or southWestLat or southWestLon: bounds = check_bounds(northEastLat, northEastLon, southWestLat, southWestLon) if bounds: maxlat, minlon, minlat, maxlon = bounds if geo_type == "msa": #*bounds expands the set from check_bounds msas = get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year, metro=True) geos = Geo.objects.filter(geo_type=Geo.TRACT_TYPE, cbsa__in=msas.values_list('cbsa', flat=True)) else: geos = get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year) else: raise Http404("Invalid bounds") elif metro: msa = get_object_or_404(Geo, geo_type=Geo.METRO_TYPE, geoid=metro) # metro includes year geos = msa.get_censustract_geos_by_msa() return geos
def msas(request): """return a list of MSA ids visible by bounding coordinates""" try: northEastLat = request.GET.get('neLat') northEastLon = request.GET.get('neLon') southWestLat = request.GET.get('swLat') southWestLon = request.GET.get('swLon') year = request.GET.get('year') maxlat, minlon, minlat, maxlon = check_bounds(northEastLat, northEastLon, southWestLat, southWestLon) msas = get_geos_by_bounds_and_type(maxlat, minlon, minlat, maxlon, year, metro=True) msa_list = [metro.geoid for metro in msas] return HttpResponse(json.dumps(msa_list), content_type='application/json') except: return HttpResponseNotFound("Invalid lat/lon bounding coordinates")