I was just checking that everything was submitted but I guess this wasn't.

This commit is contained in:
root
2024-12-16 23:58:51 -05:00
parent 2313bcfbff
commit 66f67710f0
136 changed files with 8869 additions and 2 deletions

127
geocoder/tomtom.py Normal file
View 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 TomToms 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()