首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Violation user_agent nominatim python GIS

Violation user_agent nominatim python GIS
EN

Stack Overflow用户
提问于 2020-08-03 22:58:15
回答 4查看 1.7K关注 0票数 1

当尝试在Python GIS简介(https://automating-gis-processes.github.io/CSC18/lessons/L3/geocoding.html)上执行作业时,Python出错。使用Nominatim后端对地址进行地理编码会出现违反Nominatim的ToS的错误。我知道它需要一个用户代理,但我找到的所有东西都失败了。

代码语言:javascript
复制
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

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

现在,在IPython控制台中输入所需代码后

代码语言:javascript
复制
from geopandas.tools import geocode
geo = geocode(data['addr'], provider = 'nominatim')

我得到了错误:

代码语言:javascript
复制
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"`.

按照错误中的说明,尝试使用这些示例更改用户代理以及尝试修复用户代理的方法都不起作用。我是GIS新手,不知道如何继续。有人能解决这个问题吗?

EN

回答 4

Stack Overflow用户

发布于 2020-12-08 10:47:50

geolocator = Nominatim(user_agent="Your_app-name")替换geolocator = Nominatim()

例如,

代码语言:javascript
复制
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))

将会变成

代码语言:javascript
复制
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))
票数 2
EN

Stack Overflow用户

发布于 2020-11-12 14:20:12

你必须运行这个

代码语言:javascript
复制
from geopy.geocoders import Nominatim
geopy.geocoders.options.default_user_agent = "yourmeial@emailprovider.com"
geo = geocode(data['addr'], provider='nominatim')
票数 0
EN

Stack Overflow用户

发布于 2020-11-19 01:28:34

以下是您可以尝试的内容。我正在分享我的示例from geopy.exc import GeocoderTimedOut from geopy.geocoders import Nominatim geolocator=Nominatim(user_agent="Your_app-name")

在一个城市的City_name=geolocator.geocode上测试这段代码(“印度怀特菲尔德”)

最新=City_name.latitude lon=City_name.longitude

打印( City_name,lon,Lat)结果:怀特菲尔德,甘地普拉,班加罗尔东部,班加罗尔城市,卡纳塔克邦,560066,印度77.7497448 12.9696365 `在上面的例子中,我正在传递国家和城市作为美国具有相同name.In顺序的地点为了获得更准确的结果,请尝试传递国家

请记住,在使用Nominatim时需要使用user_agent。下一步,使用apply函数在数据集中为经度和纬度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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63231855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档