Geopy python как пользоваться
Перейти к содержимому

Geopy python как пользоваться

  • автор:

География в Python

География может стать сложной задачей для программистов, в которой трудно ориентироваться (ха, каламбур!). Но модуль geopy сделает эту задачу невероятно простой.

$ pip install geopy

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

Есть также полезный класс, для работы с дистанциями. Он рассчитывает расстояние между двумя точками в необходимой вам единице измерения.

from geopy import GoogleV3 place = "Мавзолей Ленина, Москва" location = GoogleV3().geocode(place) # обрабатываем местоположение через API Google print(location.address) # получаем полный адрес print(location.location) # получаем полные координаты

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

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

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

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

В этой статье мы будем использовать Geopandas для получения координат заданных адресов в текстовой форме.

Сервис геокодирования и Geopy

Скорее всего, вы использовали геокодер раньше, даже не осознавая, например, выполняя поиск местоположения с помощью текстового описания на картах Google. такие сервисы, как Bing Maps, Google Maps и т. д., являются популярными сервисами геокодирования.

GeoPy — это не сервис геокодирования, а просто клиент Python для нескольких популярных веб-сервисов геокодирования. Он использует сторонние геокодеры и другие источники данных для поиска геокода адреса. Геокодирование предоставляется рядом различных сервисов. Эти сервисы предоставляют API, библиотека GeoPy предоставляет реализацию этих API в одном пакете.

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

Geopandas использует библиотеку GeoPy для реализации геокодирования.

Реализация с помощью Geopandas

Geopandas содержит класс geocode , который предлагает функции для геокодирования.

Классу геокода требуются следующие входные аргументы:

  1. адрес в виде строки Python.
  2. Поставщик геокодирования, который мы собираемся использовать.

Однако услуги геокодирования либо платные, либо бесплатные, поэтому перед выбором услуги ознакомьтесь с их условиями использования, квотами, ценами, базой геоданных и т.д. мы будем использовать геокодер Nominatim, так как он не требует использования ключа 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 

GeoDataFrame</p>
<p>» /></p>
<p>Класс геокода возвращает GeoDataFrame, который имеет два столбца.</p>
<ol>
<li>геометрия — содержит широту и долготу данной адресной строки.</li>
<li>адрес — полный адрес, полученный из базы данных.</li>
</ol>
<p>Поскольку он похож на фрейм данных pandas, мы можем легко управлять им с помощью функций индексации pandas.</p>
<p>Доступ к значениям широты и долготы:</p>
<pre><code >#import requires modules from geopandas.tools import geocode #address we need to locate loc = 'Machu Picchu' #finding the location location = geocode(loc, provider= '.format(point.x)) print('latitude: <> '.format(point.y))

Координаты Мачу-Пикчу</p>
<p>» /></p>
<h4>2. Использование класса Geocode с Pandas DataFrame</h4>
<p>Давайте создадим фрейм данных с названиями семи чудес света, и мы геокодируем информацию, чтобы определить их широту и долготу.</p>
<pre><code >#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() #function to unzip latitude and longitude from GeoDataFrame def custom_geocoder(address): dataframe = geocode(address , provider=

DataFrame с широтой и долготой</p>
<p>» /></p>
<p>здесь мы определили пользовательскую функцию с именем custom_geocoder , которая принимает строку адреса и геокодирует ее, возвращая значения широты и долготы как серии pandas.</p>
<p>Используя метод pandas.apply, мы применили нашу настраиваемую функцию к столбцу, содержащему названия семи чудес, добавив соответствующие значения широты и долготы в DataFrame.</p>
<pre><code ># 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</code> </pre>
<p><img decoding=

координаты места по его адресу

Привет всем! Этот пост является логическим продолжением вот этого поста, посвященного определению расстояния между двумя точками на карте по координатам GPS. Сегодня мы разберемся, как определить координаты места по его адресу в Python.

На помощь (в который раз!) приходят библиотеки. Сегодня — библиотека geopy. Работает она с помощью ряда публично-доступных API, среди которых имеются OpenStreetMap Nominatim и Google Geocoding API, благодаря чему вы можете искать GPS-координаты по адресу или названию интересующешго вас места. Больше того! С помощью этой библиотеки вы можете определить дистанцию между двумя интересующими вас точками! А значит — никакой больше формулы Хаверсина — просто библиотека, и две строки кода. Пример — как всегда — ниже:

from geopy.geocoders import Nominatim #Подключаем библиотеку geolocator = Nominatim(user_agent="Tester") #Указываем название приложения (так нужно, да) adress = str(input('Введите адрес: \n')) #Получаем интересующий нас адрес location = geolocator.geocode(adress) #Создаем переменную, которая состоит из нужного нам адреса print(location) #Выводим результат: адрес в полном виде print(location.latitude, location.longitude) #И теперь выводим GPS-координаты нужного нам адреса

А теперь давайте определим дистанцию между двумя интересующими нас точками:

from geopy.geocoders import Nominatim #Подключаем библиотеку from geopy.distance import geodesic #И дополнения geolocator = Nominatim(user_agent="Tester") #Указываем название приложения address_1 = str(input('Введите город 1: \n')) #Получаем название первого города address_2 = str(input('Введите город 2: \n')) #Получаем название второго города location_1 = geolocator.geocode(address_1) #Получаем полное название первого города location_2 = geolocator.geocode(address_2) #Получаем полное название второго города print('Город 1: ', location_1) #Выводим первичные данные print('Город 2: ', location_2) #Выводим первичные данные print('Координаты города 1: ', location_1.latitude, location_1.longitude) #Выводим координаты первого города gps_point_1 = location_1.latitude, location_1.longitude #Выводим координаты первого города gps_point_2 = location_2.latitude, location_2.longitude #Выводим координаты второго города print('Координаты города 2: ', location_2.latitude, location_2.longitude) #Выводим общие данные print('Дистанция между городом', location_1, 'и городом ', location_2, ': ', geodesic(gps_point_1, gps_point_2).kilometers, ' километров') #Выводим полученный результат в километрах

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *