我正在尝试从我的pandas数据框中获取纬度和经度点的国家/地区名称。 目前我使用geolocator.reverse(纬度,经度)来获取地理位置的完整地址。但是,在返回列表时,没有选项可以从完整地址中检索国家/地区名称。
使用的方法:
def get_country(row):
pos = str(row['StartLat']) + ', ' + str(row['StartLong'])
locations = geolocator.reverse(pos)
return locations
通过传递dataframe来调用get_country:
df4['country'] = df4.apply(lambda row: get_country(row), axis = 1)
当前输出:
StartLat StartLong Address
52.509669 13.376294 Potsdamer Platz, Mitte, Berlin, Deutschland, Europe
只是想知道在我们传递地理点时是否有一些Python库来检索国家/地区。
任何帮助都将不胜感激。
答案 0 :(得分:2)
在get_country
函数中,您的返回值location
将有一个属性raw
,这是一个如下所示的字典:
{
'address': {
'attraction': 'Potsdamer Platz',
'city': 'Berlin',
'city_district': 'Mitte',
'country': 'Deutschland',
'country_code': 'de',
'postcode': '10117',
'road': 'Potsdamer Platz',
'state': 'Berlin'
},
'boundingbox': ['52.5093982', '52.5095982', '13.3764983', '13.3766983'],
'display_name': 'Potsdamer Platz, Mitte, Berlin, 10117, Deutschland',
... and so one ...
}
所以location.raw['address']['country']
给出了'Deutschland'
如果我正确地阅读了您的问题,可能的解决方案可能是:
def get_country(row):
pos = str(row['StartLat']) + ', ' + str(row['StartLong'])
locations = geolocator.reverse(pos)
return location.raw['address']['country']
编辑:location.raw对象的格式将根据您使用的geolocator服务而有所不同。我的示例使用了geopy's documentation site上的示例中的geopy.geocoders.Nominatim,因此您的结果可能会有所不同。
答案 1 :(得分:0)
我不确定您使用geopy的服务是什么,但作为我可能偏向的小插件,我认为这对您来说可能是一个更简单的解决方案。
https://github.com/Ziptastic/ziptastic-python
WebPage
将返回如下词典列表:
from ziptastic import Ziptastic
# Set API key.
api = Ziptastic('<your api key>')
result = api.get_from_coordinates('42.9934', '-84.1595')
答案 2 :(得分:0)
我的代码,希望能对您有所帮助:
from geopy.geocoders import Nominatim
nm = Nominatim()
place, (lat, lng) = nm.geocode("3995 23rd st, San Francisco,CA 94114")
print('Country' + ": " + place.split()[-1])