from utils import make_nsfind, ET, geocoder_factory import urllib from django.utils.http import urlencode # http://developer.yahoo.com/geo/placemaker/guide/api_docs.html def geocode(q, api_key): find = make_nsfind({'ns': 'http://wherein.yahooapis.com/v1/schema'}) args = { 'documentContent': q, 'documentType': 'text/plain', 'appid': api_key, } et = ET.parse( urllib.urlopen('http://wherein.yahooapis.com/v1/document', urlencode(args))) place = find(et, 'ns:document/ns:placeDetails/ns:place') if place is None: return None, (None, None) else: name = find(place, 'ns:name').text.decode('utf8') lat = float(find(place, 'ns:centroid/ns:latitude').text) lon = float(find(place, 'ns:centroid/ns:longitude').text) return name, (lat, lon) geocoder = geocoder_factory(geocode)
from utils import simplejson, geocoder_factory import urllib from django.utils.http import urlencode # http://www.geonames.org/export/geonames-search.html def geocode(q): data = simplejson.load( urllib.urlopen('http://ws.geonames.org/searchJSON?' + urlencode({ 'q': q, 'maxRows': 1, 'lang': 'en', 'style': 'full' }))) if not data['geonames']: return None, (None, None) place = data['geonames'][0] name = place['name'] if place['adminName1'] and place['name'] != place['adminName1']: name += ', ' + place['adminName1'] return name, (place['lat'], place['lng']) # No API key required, but let's fulfil the contract anyway geocoder = geocoder_factory(geocode, takes_api_key=False)
args = { 'geocode': q, 'key': api_key, 'results': 1, 'format': 'json', } if plng: args['plng'] = plng if ll and spn: ll = hasattr(ll, '__iter__') and ','.join(map(str, ll)) or ll args['ll'] = ll spn = hasattr(spn, '__iter__') and ','.join(map(str, spn)) or spn args['spn'] = spn if rspn and ll and spn: args['rspn'] = rspn url = 'http://geocode-maps.yandex.ru/1.x/?%s' % urllib.urlencode(args) json = simplejson.load(urllib.urlopen(url)) try: member = json['response']['GeoObjectCollection']['featureMember']\ [0]['GeoObject'] return ( member['metaDataProperty']['GeocoderMetaData']['text'], tuple(map(float, member['Point']['pos'].split(' ')[::-1])) ) except (KeyError, IndexError): return (None, (None, None)) geocoder = geocoder_factory(geocode)
'maxRows': 1, 'lang': 'en', 'style': 'full' }) )) if not data['geonames']: return None, (None, None) place = data['geonames'][0] name = place['name'] if place['adminName1'] and place['name'] != place['adminName1']: name += ', ' + place['adminName1'] return name, (place['lat'], place['lng']) # No API key required, but let's fulfil the contract anyway geocoder = geocoder_factory(geocode, takes_api_key = False) ########NEW FILE######## __FILENAME__ = google import urllib from utils import simplejson, geocoder_factory # https://developers.google.com/maps/documentation/geocoding/ def geocode(q, api_key=None): json = simplejson.load(urllib.urlopen( 'http://maps.googleapis.com/maps/api/geocode/json?' + urllib.urlencode({ 'address': q, 'sensor': 'false', })