Автор оригинала: Pankaj Kumar.
Каждая точка на земле может быть расположена с учетом его координат, то есть широта и долгота. Большая часть адреса, которую мы извлекаем из реального мира, находится в текстовой форме, и из-за которой для доступа к идеальному расположению данного адреса на карте сложно.
Geocoding – это метод, в котором мы представляем строку адресов в соответствующую цену широты и долготы, что позволяет удобно найти и построить данный адрес на карте.
Геопандас расширяет свою функциональность для геокодирования через геопию, которая является дополнительной зависимостью геопандов.
В этой статье мы будем использовать Geopandas для извлечения координат данных адресов в текстовой форме.
Услуги геокодирования и геопии
Скорее всего, вы использовали геокодер до даже не реализовав I.e. В поисках местоположения используя текстовое описание на картах Google. Услуги, такие как Bing Maps, Google Maps и т. Д. Несколько популярных услуг геокодирования.
Геопия не является сервисом геокодирования, а просто клиент Python для нескольких популярных веб-сервисов Geocoding. Он использует сторонние геокодеры и другие источники данных, чтобы найти геокод адреса. Геокодирование обеспечивается рядом разных услуг. Эти услуги предоставляют API, библиотека Geopy предоставляет реализацию этих API в одном пакете.
Вы можете получить описание для всех услуг Geocoding, включенные в Geophoy здесь Отказ
Geopandas использует библиотеку Geopy для реализации геокодирования.
Geocoding Premium Services.
На рынке имеется много услуг геокодирования. Я пробовал Geocodeapi И они работают очень хорошо для бизнес-приложений. У них есть несколько конечных точек, чтобы получить Lat-Long от адреса, обратного геокодирования, автоматического полного адреса и т. Д.
Они предоставляют 10 000 бесплатных запросов в день, что отлично, если вы только начинаете создавать свое приложение. Вы можете получить больше деталей из их Ценовая страница Отказ
Реализация с геопандами
Геопандас содержит Геокод Класс, который предлагает функциональность для геокодирования.
Геокодный класс нуждается в следующих аргументах ввода:
- адрес как строка Python.
- Поставщик геокодирования мы намерены использовать.
Однако сервисы Geocoding либо платят, либо бесплатно, поэтому до выбора сервиса проходят через их условия использования, квоты, ценообразование, база геоданных и так далее. Мы будем использовать Номинатим геокодер Поскольку это не требует какой-либо ключа API для использования.
1. Использование класса GeoCode
#import requires modules from geopandas.tools import geocode #address we need to locate loc = 'Machu Picchu' #finding the location location = geocode(loc, provider="nominatim" , user_agent = 'my_request') location
Класс Geocode возвращает GeodataTaframe, который имеет два столбца.
- Геометрия – содержащая широту и долготу данной адресной строки.
- Адрес – полный адрес, извлеченный из базы данных.
Как оно похоже на PandaS DataFrame, мы можем легко манипулировать им, используя функции индексации Pandas.
Доступ к ценностям широты и долготы:
#import requires modules
from geopandas.tools import geocode
#address we need to locate
loc = 'Machu Picchu'
#finding the location
location = geocode(loc, provider="nominatim" , user_agent = 'my_request')
point = location.geometry.iloc[0]
print('Name: '+ loc )
print('complete address: '+ location.address.iloc[0])
print('longitude: {} '.format(point.x))
print('latitude: {} '.format(point.y))
2. Использование класса Geocode с PandaS DataFrame
Давайте сделаем dataframe, имеющие имена Семь чудес мира, и мы геокодную информацию о приобретении их соответствующей широты и долготы.
#Importing the requires modules
import folium
import pandas as pd
from geopandas.tools import geocode
#Creating a DataFrame
wonders = ['Taj Mahal', 'Colosseum','Machu Picchu','Christ the Redeemer','Chichen Itza','petra']
df = pd.DataFrame({'wonders' : wonders})
#function to unzip latitude and longitude from GeoDataFrame
def custom_geocoder(address):
dataframe = geocode(address , provider="nominatim" , user_agent = 'my_request')
point = dataframe.geometry.iloc[0]
return pd.Series({'Latitude': point.y, 'Longitude': point.x})
#Applying function to the dataframe
df[['latitude' , 'longitude']]= df.wonders.apply( lambda x: custom_geocoder(x))
df
Здесь мы определили пользовательскую функцию имени custom_geoCoder который принимает строку адреса и геокодов, которые он возвращает значения широты и долготы как серии Panda.
Использование метода Pandas .Apply Мы применили нашу собственную функцию в столбцу, содержащую имена семи чудес, добавляющих соответствующие значения широты и долготы в DataFrame.
Построение результатов
# Make sure you run the above code first to plot the results
mapit = folium.Map( location=[0, 0], zoom_start=1 )
for lat , lon in zip(df.latitude , df.longitude):
folium.Marker( location=[ lat,lon ], fill_color='#43d9de', radius=8 ).add_to( mapit )
mapit
Заключение
Эта статья была все о использовании геопанды для геокодирования строки адресов. Мы также применили геокодирование на PandaS DataFrame, имеющие имена семи чудес мира и визуализировали результаты на карте с использованием фолиевых.
Счастливое обучение!