Время прочтения: 2 мин.
Для того, чтобы перевести географические координаты в наименования адресов объектов недвижимости, в первую очередь необходимо, используя консоль (win+r Ø cmd), произвести установку библиотеки GeoPy при помощи команды:
pip install geopy
Далее импортируем необходимые библиотеки, их всего две:
from geopy.geocoders import Nominatim
import pandas as pd
Для перевода координат в адреса напишем функцию get_address_by_location:
def get_address_by_location(latlong, language='ru'):
app = Nominatim(user_agent='tutorial')
try:
return app.reverse(latlong, language=language).raw
except:
return get_address_by_location(latlong)
Аргументом функции get_address_by_location является строка (тип данных «str»), состоящая из перечисленных через запятую координат широты и долготы.
На вход подаем данные в виде excel-таблицы:
Широта | Долгота |
48.3817750984508 | 135.1204040451879 |
48.381412052738085 | 135.0959719910949 |
60.93805932585315 | 76.59672655946456 |
54.846758643393954 | 46.58899756398235 |
58.304432548329466 | 48.643817147897046 |
59.21724209255741 | 39.90126708580591 |
48.19466349351636 | 136.13723640773017 |
Указанные выше данные импортируем в DataFrame:
data = pd.read_excel('list.xlsx')
При помощи цикла и генератора списков каждая координата переводится в одну строку, которая в дальнейшем подается в качестве аргумента в ранее созданную функцию get_address_by_location. На выходе из функции получаем словарь Python c набором данных, из которых выбираем нужные и сохраняем в питоновский список «lst».
lst = []
for i in range(len(data)):
latlong = (',').join(str(x) for x in list(data.iloc[i]))
address = get_address_by_location(latlong)
element = [data.iloc[i]['Широта'],
data.iloc[i]['Долгота'],
address['address']['state'],
address['address']['city'] if 'city' in address['address'] \
else (address['address']['village'] if 'village' in address['address']\
else(address['address']['town'] if 'town' in address['address'] else '')),
address['address']['road'] if 'road' in address['address'] else '',
address['address']['house_number'] if 'h ouse_number' in address['address'] else '']
lst.append(element)
Для сохранения полученных данных в excel-файл, предварительно переводим список lst в DataFrame:
df = pd.DataFrame(lst, columns=['Широта', 'Долгота', 'Регион', 'Город/ПГТ/Село', 'Улица', 'Номер дома'])
А после при помощи функции to_excel экспортируем DataFrame df в xlsx-файл:
df.to_excel(‘list_address.xlsx’,index=False)
На выходе получаем список координат и соответствующие им наименования адресов объектов недвижимости в табличной форме: