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

Python Geopy, чтобы найти геокод адреса

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

Автор оригинала: Pankaj Kumar.

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

По словам Википедия , «Geocoding – это вычислительный процесс преобразования описания почтового адреса в местоположение на поверхности Земли (пространственное представление в числовых координатах)».

Если просто собрать вместе, процесс представления текстовых адресов на их соответствующую широту и долготу на поверхности земли называется Геокодирование Отказ

В этой статье мы возьмем геокод адреса с использованием библиотеки Geopy Python.

Геопия

Геопия не является сервисом геокодирования, а просто клиент Python для нескольких популярных веб-сервисов Geocoding. Он использует сторонние геокодеры и другие источники данных для поиска геокода адреса.

На рисунке ниже дают некоторое представление о функции геопии.

Геопия API

Как видно на рисунке выше геокодирования обеспечивается ряд различных услуг. Эти услуги предоставляют API, библиотека Geopy предоставляет реализацию этих API в одном пакете. Для получения полного списка поставщиков услуг геокодирования, реализованные Geopy, вы можете обратиться в Эта документация Отказ

Некоторые важные моменты для рассмотрения:

  • Услуги геокодирования либо платят, либо бесплатно, поэтому до выбора сервиса проходят свои условия использования, квоты, ценообразование, база геоданных и так далее.
  • Геопия не может быть нести ответственность за любые сетевые проблемы между вашим компьютером и службой геокодирования.

При достаточно высоком уровне идеи о том, что делает геопию, давайте теперь посмотрим, как использовать его для извлечения геокода адреса.

Геокодирование Услуги

Есть много услуг геокодирования, но мне очень понравилось Geocodeapi Отказ У них есть несколько конечных точек, чтобы получить Lat-Long от адреса, а также обратный геокодирование. Одна из их продвинутых функций является Адрес Auto-Complete API Отказ

Они могут даже вернуть полный адрес с частичного адреса. Кроме того, они предоставляют 10 000 бесплатных запросов в день, что отлично, если вы просто начинаете создавать свое приложение. Вы можете получить больше деталей из их Ценовая страница Отказ

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

Каждый сервис геолокации I.E. Nominatim, имеет свой собственный класс в Geophe.GeoCoders Связывание к API службы. Geocoders есть как минимум Геокод Способ, для поиска координат из предоставленной строки (адрес, который мы хотим для геокода).

Этот класс также имеет реализацию Обратный Метод, который находится в обратном направлении в метод геокод. Здесь нам необходимо предоставить координаты точки на поверхности Земли, и метод возвращает адрес, связанный с предоставленной LAT и LON.

1. Нахождение геокода адреса

Мы будем использовать Nominatim Geocoding Services в этом руководстве.

#Importing the Nominatim geocoder class 
from geopy.geocoders import Nominatim

#address we need to geocode
loc = 'Taj Mahal, Agra, Uttar Pradesh 282001'

#making an instance of Nominatim class
geolocator = Nominatim(user_agent="my_request")

#applying geocode method to get the location
location = geolocator.geocode(loc)

#printing address and coordinates
print(location.address)
print((location.latitude, location.longitude))
Output:
Taj Mahal, Taj Mahal Internal Path, Taj Ganj, Agra, Uttar Pradesh, 282001, India
(27.1750123, 78.04209683661315)

Используя код выше, мы нашли координаты Taj Mahal, Agra, Индия.

Номинатим класса имеет Геокод Способ, который принимает строку адреса и возвращает его координаты из базы данных поставщика услуг. Объект, возвращаемый с помощью метода Geocode, имеет Адрес Метод, который возвращает полный адрес, A широта , Лондоту способ получить лат и по этому адресу.

Класс Nominatim Geocoder принимает user_agent В качестве входного аргумента, который действует как заголовок для отправки запросов на API GeoCoder.

2. Использование геопии с PandaS DataFrame

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

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

Давайте теперь применим это к PandaS DataFrame, имеющим адрес для некоторых красивых мест природы в Индии.

#Importing the required modules
import pandas as pd
from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter

#Creating a dataframe with address of locations we want to reterive
locat = ['Coorg, Karnataka' , 'Khajjiar, Himachal Pradesh',\
         'Chail, Himachal Pradesh' , 'Pithoragarh, Uttarakhand','Munnar, Kerala']
df = pd.DataFrame({'add': locat})

#Creating an instance of Nominatim Class
geolocator = Nominatim(user_agent="my_request")

#applying the rate limiter wrapper
geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)

#Applying the method to pandas DataFrame
df['location'] = df['add'].apply(geocode)
df['Lat'] = df['location'].apply(lambda x: x.latitude if x else None)
df['Lon'] = df['location'].apply(lambda x: x.longitude if x else None)

df
Dataframe с координатами

Ratelimiter Класс нуждается в Geocoder класс объекта и min_delay_seconds в качестве входных аргументов. Этот метод производит запросы на сервер сервиса геокодирования с указанной задержкой. Если местоположение строки не обнаружено, он автоматически возвращает.

С методом Pandas .Apply мы можем применить обертку в указанный столбец в нашем dataframe.

Заключение

В этой статье мы узнали, что геокодирование и как библиотека Geopy Python предоставляет нам простую реализацию API-сигналов GeoCoding Services. Мы также геокодировали адрес в текстовом формате, чтобы получить его широту и долготу координаты и применять метод на PandaSAframe, имеющих столбец, имеющий столбец.

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