コード例 #1
0
def geolocate(address, try_all=True):
    try:
        # see https://astral.readthedocs.io/en/latest/#cities
        a = lookup(address, database())
        return a.latitude, a.longitude
    except:
        pass  # use online geocoder

    location_data = geocoder.geonames(address, method='details', key='jarbas')
    if not location_data.ok:
        location_data = geocoder.geocodefarm(address)
    if not location_data.ok:
        location_data = geocoder.osm(address)
    if try_all:
        # more are just making it slow
        if not location_data.ok:
            location_data = geocoder.google(address)
        if not location_data.ok:
            location_data = geocoder.arcgis(address)
        if not location_data.ok:
            location_data = geocoder.bing(address)
        if not location_data.ok:
            location_data = geocoder.canadapost(address)
        if not location_data.ok:
            location_data = geocoder.yandex(address)
        if not location_data.ok:
            location_data = geocoder.tgos(address)

    if location_data.ok:
        location_data = location_data.json
        lat = location_data.get("lat")
        lon = location_data.get("lng")

        return lat, lon
    raise ValueError
コード例 #2
0
ファイル: location.py プロジェクト: j1nx/jarbas_utils
def geolocate(address, service="geocodefarm"):
    data = {}
    if service == "geocodefarm":
        location_data = geocoder.geocodefarm(address)
    elif service == "osm":
        location_data = geocoder.osm(address)
    elif service == "google":
        location_data = geocoder.google(address)
    elif service == "arcis":
        location_data = geocoder.arcgis(address)
    elif service == "bing":
        location_data = geocoder.bing(address)
    elif service == "canadapost":
        location_data = geocoder.canadapost(address)
    elif service == "yandex":
        location_data = geocoder.yandex(address)
    elif service == "tgos":
        location_data = geocoder.tgos(address)
    else:
        raise ValueError("Unknown geocoder service")

    if location_data.ok:
        location_data = location_data.json
        data["country"] = location_data.get("country")
        data["country_code"] = location_data.get("country_code")
        data["region"] = location_data.get("region")
        data["address"] = location_data.get("address")
        data["state"] = location_data.get("state")
        data["confidence"] = location_data.get("confidence")
        data["lat"] = location_data.get("lat")
        data["lon"] = location_data.get("lng")
        data["city"] = location_data.get("city")
        data["postal"] = location_data.get("postal")
        data["timezone"] = location_data.get("timezone_short")
    else:
        return None
    location = {
        "city": {
            "name": data["city"],
            "state": {
                "name": data["state"],
                "country": {
                    "code": data["country_code"],
                    "name": data["country"]
                }
            }
        },
        "coordinate": {
            "latitude": data["lat"],
            "longitude": data["lon"]
        },
        "timezone": {
            "name": data["timezone"]
        }
    }
    return location
コード例 #3
0
    def geolocate(self, address, try_all=True):
        if address in self.geocache:
            return self.geocache[address]
        try:
            # should be installed from default skills
            from astral.geocoder import database, lookup
            # see https://astral.readthedocs.io/en/latest/#cities
            a = lookup(address, database())
            self.geocache[address] = (a.latitude, a.longitude)
            return a.latitude, a.longitude
        except:
            pass  # use online geocoder

        location_data = geocoder.osm(address)
        if not location_data.ok:
            location_data = geocoder.geocodefarm(address)
        if try_all:
            # more are just making it slow
            if not location_data.ok:
                location_data = geocoder.google(address)
            if not location_data.ok:
                location_data = geocoder.arcgis(address)
            if not location_data.ok:
                location_data = geocoder.bing(address)
            if not location_data.ok:
                location_data = geocoder.canadapost(address)
            if not location_data.ok:
                location_data = geocoder.yandex(address)
            if not location_data.ok:
                location_data = geocoder.tgos(address)

        if location_data.ok:
            location_data = location_data.json
            lat = location_data.get("lat")
            lon = location_data.get("lng")
            self.geocache[address] = (lat, lon)
            return lat, lon
        raise ValueError
コード例 #4
0
def tgos_by_geocoder(address):
	g = geocoder.tgos(address)
	#g.debug()
	if g.ok:
		return (g.lat, g.lng)
	return False
コード例 #5
0
ファイル: test_geocoder.py プロジェクト: xclu/geocoder
def test_tgos():
    g = geocoder.tgos(taiwan)
    assert g.ok
    g = geocoder.tgos(taiwan, language='en')
    assert g.ok
コード例 #6
0
ファイル: test-address.py プロジェクト: x7852398521/python
def tgos_by_geocoder(address):
    g = geocoder.tgos(address)
    #g.debug()
    if g.ok:
        return (g.lat, g.lng)
    return False