Ejemplo n.º 1
0
 def get_active_geocoders():
     active_geocoders = []
     active_geocoders.append({
         'name': _('Google geocoder'),
         'geocoder': geocoders.GoogleV3(),
         'is_exact': True,
     })
     if MAPQUEST_API_KEY:
         active_geocoders.append({
             'name':
             _('MapQuest geocoder'),
             'geocoder':
             geocoders.MapQuest(api_key=MAPQUEST_API_KEY),
             'is_exact':
             False,
         })
     if GEONAMES_USERNAME:
         active_geocoders.append({
             'name':
             _('Geonames places database'),
             'geocoder':
             geocoders.GeoNames(username=GEONAMES_USERNAME),
             'is_exact':
             False,
         })
     active_geocoders.append({
         'name': _('Nominatim database'),
         'geocoder': geocoders.OpenMapQuest(),
         'is_exact': False,
     })
     return active_geocoders
Ejemplo n.º 2
0
    def _query_geolocation(self, country, capital):
        geo = geocoders.OpenMapQuest()

        try:
            location = geo.geocode(country)
        except IndexError:
            location = geo.geocode(capital)
        return location
Ejemplo n.º 3
0
    def __init__(self):

        #initialize geocoders once:
        self.google = geocoders.GoogleV3()
        #doesn't look like yahoo supports free api any longer:
        #http://developer.yahoo.com/forum/General-Discussion-at-YDN/Yahoo-GeoCode-404-Not-Found/1362061375511-7faa66ba-191d-4593-ba63-0bb8f5d43c06
        #yahoo = geocoders.Yahoo('PCqXY9bV34G8P7jzm_9JeuOfIviv37mvfyTvA62Ro_pBrwDtoIaiNLT_bqRVtETpb79.avb0LFV4U1fvgyz0bQlX_GoBA0s-')
        self.usgeo = geocoders.GeocoderDotUS() 
        self.geonames = geocoders.GeoNames()
        self.bing = geocoders.Bing('AnFGlcOgRppf5ZSLF8wxXXN2_E29P-W9CMssWafE1RC9K9eXhcAL7nqzTmjwzMQD')
        self.openmq = geocoders.OpenMapQuest()
        self.mq = geocoders.MapQuest('Fmjtd%7Cluub2hu7nl%2C20%3Do5-9uzg14')
Ejemplo n.º 4
0
def geocodeHS(geocoder, hs_id, lookup_hs_name):
    if geocoder == 'arcgis':
        geolocator = geocoders.ArcGIS()
    elif geocoder == 'baidu':
        geolocator = geocoders.baidu()
    elif geocoder == 'geocodefarm':
        print("Troubleshooting AttributeError: 'NoneType' object has no attribute 'replace'")
        exit(0)
        # geolocator = GeocodeFarm()
    elif geocoder == 'geocoderdotus':
        geolocator = geocoders.GeocoderDotUS()
    elif geocoder == 'geonames':
        geolocator = geocoders.geonames()
    elif geocoder == 'googlev3':
        geolocator = geocoders.GoogleV3()
    elif geocoder == 'nominatim':
        geolocator = geocoders.Nominatim()
    elif geocoder == 'openmapquest':
        geolocator = geocoders.OpenMapQuest()
    elif geocoder == 'yandex':
        print('Do not use.  Russian site')
        exit(1)
    else:
        print('invalid geodocder specified')
        exit(1)
        
    try:
        return geolocator.geocode(lookup_hs_name, exactly_one=True, timeout=10)
    except exc.GeocoderQuotaExceeded:
        print(geocoder, ':\tGeocoderQuotaExceeded')
        exit(1)
    except exc.ConfigurationError:
        print(geocoder, ':\tConfigurationError')
        exit(1)
    except exc.GeocoderAuthenticationFailure:
        print(geocoder, ':\tGeocoderAuthenticationFailure')
        exit(1)
    except exc.GeocoderTimedOut:
        print(geocoder, ':\tGeocoderTimedOut')
        exit(1)
    except exc.GeocoderUnavailable:
        print(geocoder, ':\tGeocoderUnavailable')
        exit(1)
    except exc.GeocoderInsufficientPrivileges:
        print(geocoder, ':\tGeocderInsufficientPrivileges')
    except:
        return None
Ejemplo n.º 5
0
def geosearch(request):
    """
    Returns geocoded results in MERCATOR projection
    First tries coordinates, then a series of geocoding engines
    """
    from geopy import distance
    if request.method != 'GET':
        return HttpResponse('Invalid http method; use GET', status=405)

    try:
        txt = unicode(request.GET['search'])
    except:
        return HttpResponseBadRequest()

    searchtype = lat = lon = None
    place = txt
    try:
        p = Point(txt)
        lat, lon, altitude = p
        searchtype = 'coordinates'
    except:
        pass  # not a point

    centerloc = Point("45.54 N 120.64 W")
    max_dist = 315  # should be everything in WA and Oregon

    searches = [
        geocoders.GeoNames(),
        geocoders.OpenMapQuest(),
        geocoders.Yahoo(app_id=settings.APP_NAME),
        geocoders.Bing(api_key=settings.BING_API_KEY),
        # these are tried in reverse order, fastest first
        # TODO thread them and try them as they come in.
    ]

    while not (searchtype and lat and lon):  # try a geocoder
        try:
            g = searches.pop()
        except IndexError:
            break  # no more search engines left to try

        try:
            for p, loc in g.geocode(txt, exactly_one=False):
                d = distance.distance(loc, centerloc).miles
                if d < max_dist:
                    # TODO maybe compile these and return the closest to map center?
                    # print g, p, loc
                    place = p
                    lat = loc[0]
                    lon = loc[1]
                    max_dist = d
                else:
                    pass
            searchtype = g.__class__.__name__
        except:
            pass

    if searchtype and lat and lon:  # we have a winner
        cntr = GEOSGeometry('SRID=4326;POINT(%f %f)' % (lon, lat))
        cntr.transform(settings.GEOMETRY_DB_SRID)
        cntrbuf = cntr.buffer(settings.POINT_BUFFER)
        extent = cntrbuf.extent
        loc = {
            'status': 'ok',
            'search': txt,
            'place': place,
            'type': searchtype,
            'extent': extent,
            'latlon': [lat, lon],
            'center': (cntr[0], cntr[1]),
        }
        json_loc = json.dumps(loc)
        return HttpResponse(json_loc, mimetype='application/json', status=200)
    else:
        loc = {
            'status': 'failed',
            'search': txt,
            'type': None,
            'extent': None,
            'center': None,
        }
        json_loc = json.dumps(loc)
        return HttpResponse(json_loc, mimetype='application/json', status=404)
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 10 06:28:36 2020

@author: Erick
"""

import geopy.geocoders as geocoders
import pandas as pd
import numpy as np
from geopy.distance import geodesic
import time

gc = geocoders.OpenMapQuest(api_key='K3jJ7vzSucxf3fbSH7QlUrRVrMdOfYqR')
csv_file = './countries_list.csv'
reference_city = 'Wuhan'

if __name__ == "__main__":

    df_region_list = pd.read_csv(csv_file)
    df_regions = df_region_list['Country/Region']
    regions = list(df_regions)
    n_cities = len(df_region_list)
    coordinates = np.empty(n_cities,
                           dtype=np.dtype([('latitude', 'd'),
                                           ('longitude', 'd')]))
    distance_from_wuhan = np.empty(n_cities)
    loc_wuhan = gc.geocode('Wuhan')
    coords_wuhan = (loc_wuhan.latitude, loc_wuhan.longitude)
    # get the coordinates
    for i, row in df_region_list.iterrows():