API. Подключение к сервисам

Что такое API - Application Programming Interface?

Если попытаться пояснить на простом языке – это способ получить от программы/сервера ответ на ваш вопрос напрямую. Это особенно актуально для сообщения приложений между собой.
В случае с ГИС и открытыми геоданными в этом справочнике подразумевается получение необходимых данных через определенный запрос в формате http (например, через адресную строку в том же браузере).
Наглядное пояснение, что такое API (англ.):



api.datamos.ru


Портал открытых данных Москвы позволяет скачивать геоданные в формате geojson только через API (особенно это касается данных в виде полигонов или линий). Для подключения к API необходимо получить ключ после регистрации на сайте.
Ссылка на документацию https://apidata.mos.ru/Docs. Самый простой способ скачивания: вбиваем адрес в адресную строку браузера и сохраняем полученный ответ как geojson файл.


Некоторые особенности работы (на 16.01.2019):

  • Атрибуты при скачивании через API "слеплены" в один. Решается разными путями, один из методов скачивания и "починки" рассмотрен Андреем Кармацким
  • Некоторые наборы данных, где много полигонов, нельзя скачать за один раз. Например, слой с участками.
  • Фильтр по охвату (пространственный фильтр) работает только для точек

Возможно применять инструменты типа Insomnia или Postman (для продвинутых пользователей).

Приложение FME Workbench (довольно дорогое) позволяет напрямую считывать geojson с портала datamos.ru и конвертировать «на лету» в другие форматы, решая проблему "слепленных" атрибутов.


Портал открытых данных Министерства культуры РФ

Сами данные можно скачать одним файлом, но на всю территорию РФ. Для фильтрации при скачивании можно использовать API-запросы.
Пример: https://opendata.mkrf.ru/v1/egrkn/$/$?f={“data.general.region.id”:”29”}&l=1000 - запрос всех ОКН по Архангельской области

Запросы с большими лимитом не проходят. В текущей реализации происходит принудительное уменьшение лимита до 1000 (это видно из заголовка JSON ответа), но в следующей версии протокола они будут закрыты и сервер будет возвращать ошибку. Лучше использовать алгоритмы постраничного получения документов (забираете по 100 штук, повторяя запрос, указывая смещение XXXX ...&l=100&s=XXXX)

Альтернативным вариантом является получения полной выгрузки по ссылке с портала, например:


Обработка происходит уже локально на компьютере.

Overpass-api - скачивание из OpenStreetMap

Скачивание данных из OpenStreetMap можно было бы вынести в отдельный блок. Основной сайт - http://overpass-turbo.eu/#
Очень распространенная задача, особенно когда требуется что-то специфическое.
Если находитесь в России, в Настройке необходимо выставить сервер https://overpass.kumi.systems/api/




Рекомендую полезное упражнение по выгрузке из OSM "Город мечты".
Пример выгрузки университетов из OSM по всей территории РФ:



Примеры запросов overpass

  • building=* - все здания
  • highway=* - все дороги
  • amenity=school – все школы
  • leisure=park – все парки
  • sport=* - все объекты спорта
  • landuse=* - объекты землепользования
  • natural=water – водные объекты
  • building=* in "Восточный административный округ" – все здания в ВАО (если не срабатывает, ставим обычные кавычки вокруг названия)
  • amenity=bench in "Измайловский лесопарк" – все скамейки в Измайловском лесопарке
  • building=* and height=* and (type:way or type:relation) – выборка зданий с высотой, точки исключены
  • building=* and newer:"2 weeks" – выборка зданий, созданных/измененных за последние 2 недели
  • user:osm-user (например: user:”Evgeny Shirinyan” или user:literan)

Подробнее о методе составления запросов https://wiki.openstreetmap.org/wiki/Overpass_turbo/Wizard

Извлечение геоданных из сайтов с картами

Данная операция подразумевает наличие на сайте карты с векторными объектами. Конечно, если на сайте есть обычная таблица с указанием координат, тогда вопрос чаще всего снимается. Если таковой нет, а есть лишь веб-карта, то алгоритм будет следующий.

Открываем код страницы и отыскиваем в разделе Network – XHR элементы, содержащие геоданные. Там размещаются по запросу (который можно также сохранить как API-запрос) json-элементы с координатами.
Пример (см. до момента с Openrefine):



Скриншот кода страницы с изохронами Mapzen (сайт уже закрыт)


Копируем содержимое ответа в блокнот, перебиваем формат на json.
Этот итоговый файл может быть вставлен напрямую в QGIS перетаскиванием (по сути, это уже geojson).

Конвертация json в таблицу

Если в ответе вы получаете не geojson, а json (который несколько отличается по структуре и не может быть визуализирован в QGIS сразу), то есть вариант конвертировать json в простой табличный формат csv. http://www.convertcsv.com/json-to-csv.htm
Это решение подойдет для координат точек, а для координат полигонов может понадобиться специалист.

Также можно использовать последние версии Excel для чтения json-данных и Openrefine.

Galton для QGIS

Разработчик Galton довольно часто вносит корректировки, неизвестно, сколько будет поддерживаться сам сервис, но сейчас должна работать ссылка типа https://galton.urbica.co/api/foot/?lng=37.642165306088&lat=55.759526039351215&radius=5&cellSize=0.2&intervals=20&intervals=10
Плагин разработан студентом МАрхИ Мавленкиным А. в рамках курса «Основы ГИС», 2017. Он позволяет посчитать доступность по слою точек в массовом порядке.

Ссылка на все материалы, последняя версия плагина (про установку читаем README_FIRST) https://www.dropbox.com/sh/jjxt5ficjlot3db/AADc4zPHfibA7EnXGVP3b-1Na?dl=0

Еще один, менее автоматизированный способ подключения к Galton через API http://prosapr.blogspot.com/2016/12/galton-qgis.html

Комментариев нет:

Отправить комментарий