从Python中的地理位置检索国家/地区

时间:2016-11-15 18:56:34

标签: python geocoding

我正在尝试从我的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库来检索国家/地区。

任何帮助都将不胜感激。

3 个答案:

答案 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])