Рубрики
Без рубрики

Геокодирование с использованием геопандасов

Каждая точка на земле может быть расположена с учетом его координат, то есть широта и долгота. Большая часть адреса, которую мы извлекаем из реального мира, в текстовом

Автор оригинала: 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, имеющие имена семи чудес мира и визуализировали результаты на карте с использованием фолиевых.

Счастливое обучение!