1
votes

Violation user_agent nominatim python GIS

Lorsque vous essayez de faire une tâche sur l'introduction à Python GIS ( https://automating-gis-processes.github.io/CSC18/lessons/L3/geocoding.html ), erreurs Python. Le géocodage des adresses avec le backend Nominatim donne l'erreur de violer les conditions d'utilisation de Nominatim. Je comprends que cela nécessite un agent utilisateur mais tout ce que j'ai trouvé échoue.

ConfigurationError: Using Nominatim with default or sample `user_agent` "geopy/2.0.0" is strongly discouraged, as it violates Nominatim's ToS https://operations.osmfoundation.org/policies/nominatim/ and may possibly cause 403 and 429 HTTP errors. Please specify a custom `user_agent` with `Nominatim(user_agent="my-application")` or by overriding the default `user_agent`: `geopy.geocoders.options.default_user_agent = "my-application"`.

Maintenant, après avoir entré le code requis dans la console IPython

from geopandas.tools import geocode
geo = geocode(data['addr'], provider = 'nominatim')

J'obtiens l'erreur:

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

fp = '/ownpath/addresses.txt/'
data = pd.read_csv(fp, sep = ';')

Essayer de changer l'agent utilisateur avec ces exemples comme indiqué dans l'erreur ainsi que les moyens d'essayer de corriger l'agent utilisateur ne fonctionnent pas. Je suis nouveau dans le SIG et je ne sais pas comment continuer. Quelqu'un peut-il résoudre ce problème?


1 commentaires

Veuillez lire les conditions d'utilisation, qui peuvent être trouvées sur le lien dans le message d'erreur. Selon les conditions d'utilisation, vous devez fournir votre propre UserAgent unique. Il peut s'agir de n'importe quelle chaîne, mais elle doit être créée par vous-même.


3 Réponses :


0
votes

vous devez exécuter ce

from geopy.geocoders import Nominatim
geopy.geocoders.options.default_user_agent = "yourmeial@emailprovider.com"
geo = geocode(data['addr'], provider='nominatim')


0 commentaires

0
votes

Voici ce que vous pouvez essayer, je partage mon exemple depuis geopy.exc importez GeocoderTimedOut depuis geopy.geocoders importez Nominatim geolocator = Nominatim (user_agent = "Your_app-name")

Tester ce code pour une ville '' City_name = geolocator.geocode ("Whitefield, Inde")

Lat = City_name.latitude lon = City_name.longitude

imprimer (City_name, lon, Lat) Résultats: Whitefield, Gandhipura, Bangalore East, Bangalore Urban, Karnataka, 560066, Inde 77.7497448 12.9696365 '' Dans l'exemple ci-dessus, je passe Country with city car il y a des endroits aux États-Unis avec le même nom.Afin d'obtenir un résultat plus précis, essayez de passer le pays

N'oubliez pas que vous devez utiliser user_agent lorsque vous utilisez Nominatim L'étape suivante Utilisez la fonction Apply pour ajouter de nouvelles colonnes dans votre ensemble de données pour la longitude et la latitude locations ['cor'] = locations ["New_loc"]. apply (geolocator.geocode) locations ["longitude"] = locations ["cor"]. apply (lambda x: x.longitude if x! = None else None) locations ["Latitude"] = locations ["cor"]. apply (lambda x: x.latitude if x! = None else None)


0 commentaires

2
votes

Remplacez geolocator = Nominatim () par geolocator = Nominatim (user_agent = "Your_app-name")

Par exemple,

address = 'Scarborough,Toronto'

geolocator = Nominatim(user_agent="smy-application")
location = geolocator.geocode(address)
latitude_x = location.latitude
longitude_y = location.longitude
print('The Geograpical Co-ordinate of Seattle,Washington are {}, {}.'.format(latitude_x, longitude_y))

deviendra

address = 'Scarborough,Toronto'

geolocator = Nominatim()
location = geolocator.geocode(address)
latitude_x = location.latitude
longitude_y = location.longitude
print('The Geograpical Co-ordinate of Seattle,Washington are {}, {}.'.format(latitude_x, longitude_y))


0 commentaires