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?
3 Réponses :
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')
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)
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))
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.