generated from mwc/lab_weather
I was just checking that everything was submitted but I guess this wasn't.
This commit is contained in:
127
geocoder/tomtom.py
Normal file
127
geocoder/tomtom.py
Normal file
@@ -0,0 +1,127 @@
|
||||
#!/usr/bin/python
|
||||
# coding: utf8
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
import logging
|
||||
|
||||
from geocoder.location import BBox
|
||||
from geocoder.base import OneResult, MultipleResultsQuery
|
||||
from geocoder.keys import tomtom_key
|
||||
|
||||
|
||||
class TomtomResult(OneResult):
|
||||
|
||||
def __init__(self, json_content):
|
||||
self._address = json_content['address']
|
||||
super(TomtomResult, self).__init__(json_content)
|
||||
|
||||
@property
|
||||
def lat(self):
|
||||
return self.raw.get('position', {}).get('lat')
|
||||
|
||||
@property
|
||||
def lng(self):
|
||||
return self.raw.get('position', {}).get('lon')
|
||||
|
||||
@property
|
||||
def geohash(self):
|
||||
return self.raw.get('id')
|
||||
|
||||
@property
|
||||
def quality(self):
|
||||
return self.raw.get('type')
|
||||
|
||||
@property
|
||||
def bbox(self):
|
||||
viewport = self.raw.get('viewport', {})
|
||||
if viewport:
|
||||
bbox = {
|
||||
'south': viewport.get('btmRightPoint')['lon'],
|
||||
'west': viewport.get('btmRightPoint')['lat'],
|
||||
'north': viewport.get('topLeftPoint')['lon'],
|
||||
'east': viewport.get('topLeftPoint')['lat'],
|
||||
}
|
||||
return BBox.factory(bbox).as_dict
|
||||
|
||||
@property
|
||||
def address(self):
|
||||
return self._address.get('freeformAddress')
|
||||
|
||||
@property
|
||||
def housenumber(self):
|
||||
return self._address.get('streetNumber')
|
||||
|
||||
@property
|
||||
def street(self):
|
||||
return self._address.get('streetName')
|
||||
|
||||
@property
|
||||
def road(self):
|
||||
return self.street
|
||||
|
||||
@property
|
||||
def city(self):
|
||||
return self._address.get('municipality')
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
return self._address.get('countrySubdivisionName', self._address.get('countrySubdivision'))
|
||||
|
||||
@property
|
||||
def country(self):
|
||||
return self._address.get('countryCode')
|
||||
|
||||
@property
|
||||
def postal(self):
|
||||
return self._address.get('postalCode')
|
||||
|
||||
|
||||
class TomtomQuery(MultipleResultsQuery):
|
||||
"""
|
||||
Geocoding API
|
||||
=============
|
||||
The Geocoding API gives developers access to TomTom’s first class geocoding service.
|
||||
Developers may call this service through either a single or batch geocoding request.
|
||||
This service supports global coverage, with house number level matching in over 50 countries,
|
||||
and address point matching where available.
|
||||
|
||||
API Reference
|
||||
-------------
|
||||
https://developer.tomtom.com/tomtom-maps-apis-developers
|
||||
"""
|
||||
provider = 'tomtom'
|
||||
method = 'geocode'
|
||||
|
||||
_URL = 'https://api.tomtom.com/search/2/geocode/{0}.json'
|
||||
_RESULT_CLASS = TomtomResult
|
||||
_KEY = tomtom_key
|
||||
|
||||
def _build_params(self, location, provider_key, **kwargs):
|
||||
return {
|
||||
'key': provider_key,
|
||||
'limit': kwargs.get('maxRows', 1),
|
||||
'countrySet': kwargs.get('countrySet'),
|
||||
'lon': kwargs.get('lon'),
|
||||
'lat': kwargs.get('lat'),
|
||||
'radius': kwargs.get('radius')
|
||||
}
|
||||
|
||||
def _before_initialize(self, location, **kwargs):
|
||||
self.url = self.url.format(location)
|
||||
|
||||
def _adapt_results(self, json_response):
|
||||
return json_response['results']
|
||||
|
||||
def _catch_errors(self, json_response):
|
||||
if 'Developer Inactive' in str(json_response):
|
||||
self.error = 'API Key not valid'
|
||||
self.status_code = 401
|
||||
|
||||
return self.error
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
g = TomtomQuery('1552 Payette dr., Ottawa')
|
||||
g.debug()
|
||||
Reference in New Issue
Block a user