Geo Lat Long

  • Geocode lat/long
    import googlemaps
    from colorama import Fore, Style
    from backend.core.models import Organization
    GOOGLE_KEY = '<KEY HERE>'
    gmaps = googlemaps.Client(key=GOOGLE_KEY)
    def gc(address):
        geocode_result = gmaps.geocode(address)
        # print(geocode_result)    if geocode_result:
            results = len(geocode_result)
            if results > 1:
                print(Fore.RED + f"Found {results} matches...")
                print(Style.RESET_ALL)
                print(geocode_result)
                return None, f"Too Many: {results}"        gc_loc = geocode_result[0]
            addr = gc_loc['formatted_address']
            print(f'{address} -> {addr}')
            loc = gc_loc['geometry']['location']
            return loc['lat'], loc['lng']
        else:
            print(Fore.RED + f"Found No matches...")
            print(Style.RESET_ALL)
        return None, "No Matches"cnt = 0for o in Organization.objects.filter(address__location__isnull=True, properties__danone__gcResult__isnull=True).exclude(address__address_line=''):
        address = ",".join([
            o.address.address_line,
            o.address.street,
            o.address.city,
            o.address.state,
            o.address.postcode,
        ])
        print(o.id, o.name, address)
        lat, lon = gc(address)
        danone = o.properties.setdefault('danone', dict())
        if lat:
            gc_loc = f"{lat}, {lon}"        print(Fore.GREEN + f'{lat}, {lon}')
            print(Style.RESET_ALL)
            cnt += 1        danone['gcResult'] = gc_loc
            o.address.location = gc_loc
            o.address.save()
        else:
            danone['gcResult'] = lon
        o.save()
    print(cnt)