2016-11-15 2 views
0

Я пытаюсь получить название страны из точек широты и долготы из моего фрейма данных pandas. В настоящее время я использовал geolocator.reverse (широта, долгота), чтобы получить полный адрес географического местоположения. Но нет способа получить имя страны из полного адреса, поскольку он возвращает список.Извлечь страну из географических мест в Python

Используемый метод:

def get_country(row): 
    pos = str(row['StartLat']) + ', ' + str(row['StartLong']) 
    locations = geolocator.reverse(pos) 
    return locations 

Призыв к get_country пропусканием dataframe:

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

вы не можете Раскол адрес и получить элемент из списка - то есть. '' Potsdamer Platz, Mitte, Berlin, Deutschland, Europ ".split (", ") [- 2]' – furas

+0

какой модуль вы используете? – furas

+0

@furas: В настоящее время я использую geolocator.reverse() – user3447653

ответ

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'] 

EDIT: формат объекта location.raw будет отличаться в зависимости от того, какую службу геолокатора вы используете. В моем примере используется метод geog.geocoders.Nominatim, из примера на geopy's documentation site, поэтому ваши результаты могут отличаться.

0

Я не уверен, какую услугу вы используете с помощью геофизики, но в качестве небольшой вилки, к которой я, вероятно, привязан, это, я думаю, может быть более простым решением для вас.

https://github.com/Ziptastic/ziptastic-python

from ziptastic import Ziptastic 

# Set API key. 
api = Ziptastic('<your api key>') 
result = api.get_from_coordinates('42.9934', '-84.1595') 

Который возвращает список словарей, как так:

[ 
    { 
     "city": "Owosso", 
     "geohash": "dpshsfsytw8k", 
     "country": "US", 
     "county": "Shiawassee", 
     "state": "Michigan", 
     "state_short": "MI", 
     "postal_code": "48867", 
     "latitude": 42.9934, 
     "longitude": -84.1595, 
     "timezone": "America/Detroit" 
    } 
]