Географические данные необходимы различным слоям общества и бизнеса. Для индивидуальных целей это очень полезный способ навигации и координации путешествий.
У вас могут быть ситуации, когда весь ваш маршрут был нанесен на карту в геоприложении, потому что вы никогда раньше лично не посещали пункт назначения. Но когда вы являетесь создателем какого-то продукта, возникает необходимость в интерактивных картах с вашими пометками.
Это широко распространенная практика в ритейле, службах доставки, банках (адреса ваших отделений) и многих-многих других сферах. Поэтому, если вы хотите упростить взаимодействие клиента с продуктом, вам должно предоставляться система географической координации.
Boundaries API — отличный способ установить указанную функцию на ваших платформах. Итак, сегодня мы рассмотрим интеллектуальный вариант управления интерактивной картой.
Как подключиться к Boundaries-IO API
Проверить ссылку на выбранный интерфейс можно здесь. Не волнуйтесь, вас не будут обременять чем-то сложным и дорогим. RapidAPI выполняет все коммуникации самостоятельно. Единственная необходимая вещь — это регистрация на этой платформе.
У вас будет возможность работать с огромными API из одного удобного места. Более того, большинство интерфейсов предлагают бесплатный доступ к базовому тарифному плану. Итак, давайте выберем такой вариант для нашего текущего API.
Важно помнить, что базовый план включает только 10 бесплатных запросов. Это означает, что вы должны быть очень осторожны с вашим опытом на этом этапе. Тем не менее, если вы пойдете по нашим стопам, вам нечего бояться. Выбрана правильная настройка, так что теперь мы можем погрузиться в глубокие воды границ API!
Как интерпретировать и визуализировать данные GeoJSON
Прежде чем мы сможем сделать это самостоятельно, нам нужно понять весь формат. GeoJSON — стандартная форма записи географических объектов. Он основан на нотации объекта Javascript. GeoJSON позволяет хранить и представлять данные о местоположении без других источников. Этот подход также имеет уникальную особенность. Он был изобретен независимыми разработчиками без коммерческого участия.
Основные области реализации GeoJSON включают геозоны, выделение регионов, указание некоторых точных мест и объединение всех предыдущих функций. Опишем основные сущности в рамках этой нотации.
- Точка — просто отмеченное место на карте. Точка объявляется с долготой и широтой.
- MultiPoint — набор точек. Это полезно, например, когда вы хотите показать все доступные магазины в выбранном регионе.
- LineString — это линия (или комбинация последовательных строк), которая показывает маршрут.
- Многоугольник — это геометрическая фигура, которая создает определенную выделенную область. Его можно использовать, например, в тех случаях, когда вы хотите показать район города, куда осуществляется доставка из вашего ресторана.
- FeatureCollection — это массив различных объектов GeoJSON. Обычно этот объект доминирует в описаниях, поскольку позволяет создавать все возможные структуры карты.
Поскольку этот формат очень популярен, мы можем найти для него множество интерактивных редакторов. Например, возьмем платформу geojson.io. Здесь мы можем протестировать наши объекты и с мгновенной визуализацией.
Итак, вернемся к конечным точкам API границ и нажмем запрос по местоположению. Этот запрос возвращает подробную информацию о районе и его конкретных координатах. Это очень полезный способ объяснить пользователю, где он находится в данный момент. Вы можете протестировать эту конечную точку в очень продвинутом рабочем интерфейсе и даже взглянуть на образец ответа.
Здесь мы можем увидеть приблизительную структуру ответа. Прежде всего, объект JSON сообщает, что он включает в себя FeatureCollection. Следующий этап посвящен описанию признаков. Здесь API возвращает некоторую полезную информацию о районе. Наконец, в результате получается словарь геометрии только с одним объектом — Polygon. Давайте скопируем этот пример ответа и вставим его непосредственно в интерфейс geojson.io.
Как видите, платформа точно отображает наш объект. Даже без дополнительной информации о происхождении полигона. Это означает, что у нас есть все необходимые инструменты для практического создания примеров. Мы можем получить некоторые полезные локации, сохранить и представить их. Ну, чего мы ждем?
Как создать приложение Geofencing Geolocation на ноутбуке Python и Jupyter
Python — очень классный язык для связи с API и обработки ответов. Это язык сценариев, поэтому нам нужно найти место с возможностью визуализации. И Jupyter Notebook подходит как нельзя лучше. Это кроссплатформенная среда для исследований Python с большими демонстрационными возможностями.
- Python — основной язык проекта. Вы можете использовать его прямо из системы или создать виртуальную среду. Мы настоящие поклонники второго варианта, поскольку он дает вам более отдельную и четкую область проекта. Также вам нужно будет обеспечить наличие пипа. Это инструмент для установки дополнительных модулей Python.
- Jupyter Notebook — браузерное решение для выполнения сниппетов Python. Он доступен как в виде отдельного модуля, так и в составе пакета Anaconda.
- geopandas — это аналог известной библиотеки pandas для Python. Этот пакет умеет работать с геозонами на очень высоком уровне. Вы можете анализировать некоторые файлы geojson/json, получать центроиды для каждого объекта и даже подсчитывать множество различных показателей. И главное преимущество заключается в том, что синтаксис взаимодействия очень похож на синтаксис Pandas.
- geojsonio — как вы помните, мы использовали эту платформу для визуализации объектов. Но мы также можем сделать это программно.
- matplotlib — модуль для визуализации графиков.
- ipywidgets — специальный модуль для Jupyter Notebook, помогающий создавать интерактивные виджеты внутри файла.
- ipyleaflet — Python-версия легендарной библиотеки JavaScript leaflet. Он имеет возможность создавать карты непосредственно в выводе Python. Но это не будет работать без ipywidgets.
- requests — еще один побочный пакет, упрощающий HTTP-запросы с API.
Мы не будем заострять внимание на особенностях использования Jupyter, поэтому, если вы не знакомы с ним, вы можете получить некоторые знания здесь.
Хорошо, давайте начнем!
Прежде всего, нам нужно понять концепцию сценария. Поскольку у нас есть очень мощный агрегатор геозон для США, мы можем упростить некоторые задачи.
Представим, что наша компания — Почтовая служба. API границ имеет очень информативную конечную точку для таких случаев. Здесь мы можем получить почтовые индексы для регионов на основе параметров запроса. Например, мы можем ввести какой-то конкретный город (или страну, местоположение и т. д.) и получить для него все почтовые индексы. Итак, наш почтальон наберет название города и увидит интерактивную карту со всеми почтовыми индексами.
Теперь нам нужно запустить нашу среду Jupyter и создать новый файл .ipynb. Давайте установим ввод от пользователя.
city = input('Type a city: ') city
Теперь пришло время получить ответ от API границ. Вставьте следующий код в новую ячейку:
import requests url = "https://vanitysoft-boundaries-io-v1.p.rapidapi.com/reaperfire/rest/v1/public/boundary" querystring = {"city":city,"limit":"50"} headers = { 'x-rapidapi-host': "vanitysoft-boundaries-io-v1.p.rapidapi.com", 'x-rapidapi-key': "YOUR_RAPID_API_KEY" } response = requests.request("GET", url, headers=headers, params=querystring) print(response.text)
Практический совет: вы можете использовать фрагмент для HTTP-взаимодействий из примеров RapidAPI. Этот был взят прямо со страницы конечной точки.
Хорошо, теперь у нас есть нужные данные, но нам нужно обеспечить возможность повторного использования этого объекта. Сохраним текст ответа в файл .json.
with open('city-zipcode.json', 'w') as f: f.writelines(response.text)
Теперь можно не волноваться о хранении данных, особенно в случае жесткого лимита на запросы к границам API. Но вернемся к обработке GeoJSON. В основном у вас есть два варианта: отобразить карту на geojson.io (с возможностью сохранить ее в Github gist) или показать ее в файле Jupyter.
import geopandas as gpd salt_lake = gpd.read_file('city-zipcode.json') print(salt_lake.head())
Вы можете видеть, что геопандас очень хорошо обрабатывает данные. Давайте проведем небольшое исследование нового набора данных.
В нашем наборе данных 49 записей, потому что мы установили ограничение для менее чем 50 почтовых индексов. Каждый объект имеет текстовые поля и геометрическое описание (в формате GeoJSON). Теперь давайте посмотрим на официальные границы Солт-Лейк-Сити.
Хорошо, но мы можем сравнить это с нашим набором данных только с небольшим графиком.
import matplotlib.pyplot as plt salt_lake.plot(figsize=(15,13))
Очень интересно, как почтовые индексы не покрывают ту же территорию, что и официальные границы города. Но, конечно, такая плохая визуализация нас не устраивает.
import geojsonio geojsonio.display(salt_lake.to_json())
Теперь ваш браузер должен быть перенаправлен на вкладку geojson.io с нашим набором данных в качестве объекта. Давайте посмотрим на это.
Довольно хорошо, правда?
Но даже этот результат не идеален.
Почтовый работник не хотел бы посещать какой-либо другой ресурс для визуализации карты.
Настало время для ipyleaflet. В этой прекрасной библиотеке есть все необходимое для создания хороших карт. Кроме того, вы можете настроить его с помощью определенных геометрических объектов.
from ipyleaflet import Map, GeoJSON import json def getXY(pt): return (pt.x, pt.y) with open('city-zipcode.json', 'r') as f: data = json.load(f) centroid = getXY(salt_lake['geometry'].centroid) m = Map(center=(mean(centroid[1]), mean(centroid[0])), zoom=10) geo_json = GeoJSON(data=data, style = {'color': 'blue', 'opacity':1, 'weight':1.9, 'dashArray':'9', 'fillOpacity':0.1}) m.add_layer(geo_json) m
Теперь работник почты должен быть доволен!
Эта карта не только интерактивна, но и программа может быть перестроена для новых объектов GeoJSON, поэтому определить почтовые индексы Солт-Лейк-Сити не составит труда.
Вывод
Если компания хочет снять все границы со своими клиентами, необходимо использовать API границ. Потому что пользовательский опыт будет более удовлетворительным с визуализацией карты и выделением. И мы знаем, что выбранный API может очень хорошо покрыть все эти варианты использования.
Все, что мы здесь сделали, — это простой пример того, как работает API, а это значит, что вы можете его улучшить или сделать что-то новое. Но даже с нашим простым кодом очевидно, насколько простым и быстрым является рендеринг GeoJSON.
Первоначально опубликовано на https://rapidapi.com 21 апреля 2020 г.