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

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

Это широко распространенная практика в ритейле, службах доставки, банках (адреса ваших отделений) и многих-многих других сферах. Поэтому, если вы хотите упростить взаимодействие клиента с продуктом, вам должно предоставляться система географической координации.

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 г.