generated from mwc/lab_weather
105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
#!/usr/bin/python
|
|
# coding: utf8
|
|
from __future__ import absolute_import
|
|
|
|
import logging
|
|
|
|
from geocoder.location import Location
|
|
from geocoder.base import OneResult
|
|
from geocoder.uscensus import USCensusQuery
|
|
|
|
|
|
class USCensusReverseResult(OneResult):
|
|
|
|
@property
|
|
def ok(self):
|
|
return bool(self.raw['States'])
|
|
|
|
@property
|
|
def state(self):
|
|
if self.raw['States']:
|
|
return self.raw['States'][0].get('NAME')
|
|
|
|
@property
|
|
def statenumber(self):
|
|
if self.raw['States']:
|
|
return self.raw['States'][0].get('STATE')
|
|
|
|
@property
|
|
def county(self):
|
|
if self.raw['Counties']:
|
|
return self.raw['Counties'][0].get('NAME')
|
|
|
|
@property
|
|
def countynumber(self):
|
|
if self.raw['Counties']:
|
|
return self.raw['Counties'][0].get('COUNTY')
|
|
|
|
@property
|
|
def tract(self):
|
|
if self.raw['Census Tracts']:
|
|
return self.raw['Census Tracts'][0].get('NAME')
|
|
|
|
@property
|
|
def tractnumber(self):
|
|
if self.raw['Census Tracts']:
|
|
return self.raw['Census Tracts'][0].get('TRACT')
|
|
|
|
@property
|
|
def block(self):
|
|
if self.raw['2010 Census Blocks']:
|
|
return self.raw['2010 Census Blocks'][0].get('NAME')
|
|
elif self.raw['Census Blocks']:
|
|
return self.raw['Census Blocks'][0].get('NAME')
|
|
|
|
@property
|
|
def blocknumber(self):
|
|
if self.raw['2010 Census Blocks']:
|
|
return self.raw['2010 Census Blocks'][0].get('BLOCK')
|
|
elif self.raw['Census Blocks']:
|
|
return self.raw['Census Blocks'][0].get('BLOCK')
|
|
|
|
@property
|
|
def geoid(self):
|
|
if self.raw['2010 Census Blocks']:
|
|
return self.raw['2010 Census Blocks'][0].get('GEOID')
|
|
elif self.raw['Census Blocks']:
|
|
return self.raw['Census Blocks'][0].get('GEOID')
|
|
|
|
|
|
class USCensusReverse(USCensusQuery):
|
|
"""
|
|
US Census Geocoder REST Services
|
|
=======================
|
|
The Census Geocoder is an address look-up tool that converts your address to an approximate coordinate (latitude/longitude) and returns information about the address range that includes the address and the census geography the address is within. The geocoder is available as a web interface and as an API (Representational State Transfer - REST - web-based service).
|
|
|
|
API Reference
|
|
-------------
|
|
https://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf
|
|
|
|
"""
|
|
provider = 'uscensus'
|
|
method = 'reverse'
|
|
|
|
_URL = 'https://geocoding.geo.census.gov/geocoder/geographies/coordinates'
|
|
_RESULT_CLASS = USCensusReverseResult
|
|
|
|
def _build_params(self, location, provider_key, **kwargs):
|
|
location = Location(location)
|
|
return {
|
|
'x': location.longitude,
|
|
'y': location.latitude,
|
|
'benchmark': kwargs.get('benchmark', '4'),
|
|
'vintage': kwargs.get('vintage', '4'),
|
|
'format': 'json'
|
|
}
|
|
|
|
def _adapt_results(self, json_response):
|
|
return [json_response['result']['geographies']]
|
|
|
|
|
|
if __name__ == '__main__':
|
|
logging.basicConfig(level=logging.INFO)
|
|
g = USCensusReverse([38.846542, -76.92691])
|
|
g.debug()
|