Статья:

МЕХАНИЗМЫ РЕШЕНИЯ ПРОБЛЕМ ИСПОЛЬЗОВАНИЯ ДАННЫХ ГЕОИНФОРМАЦИОННЫХ СЕРВИСОВ

Конференция: I Студенческая международная заочная научно-практическая конференция «Молодежный научный форум: технические и математические науки»

Секция: 3. Информационные технологии

Выходные данные
Привалов В.Н. МЕХАНИЗМЫ РЕШЕНИЯ ПРОБЛЕМ ИСПОЛЬЗОВАНИЯ ДАННЫХ ГЕОИНФОРМАЦИОННЫХ СЕРВИСОВ // Молодежный научный форум: Технические и математические науки: электр. сб. ст. по мат. I междунар. студ. науч.-практ. конф. № 1(1). URL: https://nauchforum.ru/archive/MNF_social/1.pdf (дата обращения: 26.12.2024)
Лауреаты определены. Конференция завершена
Эта статья набрала 5 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

МЕХАНИЗМЫ РЕШЕНИЯ ПРОБЛЕМ ИСПОЛЬЗОВАНИЯ ДАННЫХ ГЕОИНФОРМАЦИОННЫХ СЕРВИСОВ

Привалов Владимир Николаевич
бакалавр информационных технологий, студент Уральского Федерального университета, г. Екатеринбург
Обабков Илья Николаевич
научный руководитель, канд. техн. наук, доцент Уральского Федерального университета, г. Екатеринбург

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

На сегодняшний день существует огромное количество геоинформационных сервисов (ГИС), предоставляющих разработчикам открытые API для работы с геопространственными данными. При работе с ГИС часто возникают проблемы, связанные с обработкой предоставленных этими сервисами данных, которые не соответствуют требованиям использующих их приложений. Такие проблемы приходится решать самим разработчикам вручную, стандартных алгоритмов решения пока не существует.

Рассмотрим некоторые практические задачи, возникающие при разработке сервиса, предоставляющего данные с геопространственной привязкой.

Задача корректировки данных результата геокодирования

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

Сервис Google Geocoding API предоставляет возможность геокодирования посредством HTTP-запроса. В официальной документации к Google Geocoding API [Google Geocoding API: https://developers.google.com/maps/documentation/geocoding/] указано, что сервис в запросе принимает все известные компоненты адреса, включая название страны, города, и т. д. и в ответ возвращает данные о точке: географические координаты, точность координат и тип точности результата. Среди предопределенных типов точности результата тип наибольшей точности имеет значение ROOFTOP [5], который означает, что сервис имеет информацию о данном местоположении с точностью вплоть до адреса дома.

Однако, как и другие ГИС, сервис Google Geocoding обладает существенными недостатками. Если он изначально некорректно интерпретировал запрос, в результате может быть получена точка с геопространственной привязкой в другом населенном пункте даже при указании точного адреса в запросе. Также в статье [Improved Geocoding, Or: How I Learned to Stop Worrying and Love the Map http://blog.redfin.com/devblog/2009/01/improved_geocoding_or_how_i_learned_to_stop_worrying_and_love_the_map.html] сообщается о том, что если сервис не может найти адрес, он может самостоятельно изменить его, не предупреждая об этом пользователя, и вернуть точку с высоким типом точности результата по новому адресу.

В процессе разработки сервиса возникла подобная проблема: в результате запроса к Google Geocoding API была получена точка с теми же названием улицы и номером дома, указанными в запросе, но в соседнем городе. При этом возникла задача корректировки неверных результатов геокодирования.

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

Google Geocoding API может возвращать различные результаты на один и тот же запрос. Это позволяет провести отбор результатов на основе данных, содержащихся в ответах на запросы к Google Geocoder. Сначала из нескольких результатов выбираются только те, которые имеют тип точности 'ROOF_TOP' при их наличии, остальные отбрасываются. Для точного решения задачи необходимо наличие только одного такого результата, но иногда в итоге имеется больше одного результата. В том случае, когда остается несколько результатов с типом точности 'ROOF_TOP' нужно применить алгоритм корректировки:

1.  Получить координаты центра целевого города посредством запроса к Google Geocoder.

2.  Вычислить расстояния между точками, возвращаемыми в результате геокодирования и точкой, полученной на шаге 1.

3.  Выбрать из всех точек единственную, имеющую наименьшее расстояние до точки центра города.

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

Задача преобразования географических координат в линейное расстояние между точками      

Вторая проблема, возникшая при разработке сервиса, была связана с использованием ГИС OpenStreetMap, сокращённо OSM. OSM предоставляет API для получения сырых геопространственных данных из своей базы данных [OpenStreetMap — Википедия: http://ru.wikipedia.org/wiki/OpenStreetMap]. Один из сервисов API, предлагаемых этой ГИС для разработчиков Nominatim. Nominatim представляет собой инструмент для поиска данных по имени и адресу.

В соответствии с официальной документацией [NominatimOpenStreetMap Wiki: http://wiki.openstreetmap.org/wiki/Nominatim] в Nominatim API включен запрос, возвращающий данные обо всех объектах, находящихся в пределах прямоугольной географической области. Этот запрос в качестве параметров принимает значения координат всех точек, образующих прямоугольную область. Такие запросы удобны при необходимости поиска объектов в данном радиусе вокруг рассматриваемой точки, однако для построения таких запросов необходимо явно указывать границы области.

Таким образом, возникла задача определения координат границ прямоугольной области вокруг заданной точки. Проблема состоит в том, чтобы для данной точки на поверхности планеты определить значение координат для четырех точек, образующих вокруг нее прямоугольную область в заданном радиусе. Для определения координат точек на расстоянии от заданной точки нам необходимо произвести перевод линейных расстояний между точками на поверхности планеты в угловые.

Преобразование линейного расстояния в градусы широты достаточно простая операция. Один градус широты является единицей постоянной. Длина меридиана 40007,86 км. Поэтому в одном градусе широты всегда постоянное количество километров: 40007,86 км / 360° = 111,1329 км.

Преобразование линейного расстояния в градусы долготы сложнее, чем в градусы широты. Как показано в статье [О GPS-координатах замолвите слово: http://autodela.ru/main/top/review/GPS_koord], поскольку поверхность планеты представляет собой полярную систему координат — в полюсах все долготы сходятся, то для выполнения задачи необходимые расчеты нужно производить в рамках этой системы координат. В случае с нашей планетой количество километров в одном градусе долготы зависит от широты. Для того чтобы рассчитать количество километров в одном градусе долготы на конкретной широте, нужно это число умножить на косинус широты.

Расчет расстояния между двумя географическими точками

Также при использовании ГИС OSM возникла другая проблема: результаты запросов содержали избыточные данные, так как запрос к Nominatim возвращал точки в пределах прямоугольной рамки, в то время как требовались точки в пределах окружности заданного радиуса.

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

Расчет расстояний между точками на поверхности планеты сложнее, чем на плоскости, поскольку поверхность планеты является сферической.

Как сообщается в статье [GIS-Lab: Вычисление расстояния и начального азимута между двумя точками на сфере: http://gis-lab.info/qa/great-circles.html], кратчайшим расстоянием между двумя точками на поверхности планеты является длина меньшей из двух дуг, проведенных между точками на поверхности планеты, а для вычисления кратчайшего расстояния между точками на ее поверхности необходимо использовать уравнения для вычисления расстояний на большом круге.

Была применена следующая формула расчета сферического расстояния большого круга, называемая модификацией формулы гаверсинусов:

 

,

 

где: , ; ,   широта и долгота двух точек в радианах

  разница координат по долготе

 — угловая разница

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

Выводы:

1.  Благодаря специфичности геопространственных данных работа с такими данными представляет довольно нетривиальный процесс, требующий знаний не только в традиционной геометрии Эвклида, но и в сферической геометрии.

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

3.  Существуют проблемы, связанные с геопространственными данными, когда данные не соответствуют рассматриваемой ситуации, например, несоответствие географических координат объекта целевой географической области. В таких ситуациях проверку корректности решения приходится выполнять вручную, например, чтобы проверить точное соответствие координат объекта целевой области, нужно проводить визуальную проверку результата на карте.

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

 

Список литературы:

1. Google Geocoding API, 2013 — [Электронный ресурс] — Режим доступа. URL: https://developers.google.com/maps/documentation/geocoding/.

2.  GIS-Lab: Вычисление расстояния и начального азимута между двумя точками на сфере, Максим Дубинин, 2011 — [Электронный ресурс] — URL: http://gis-lab.info/qa/great-circles.html.

3.  Improved Geocoding, Or: How I Learned to Stop Worrying and Love the Map [Электронный ресурс] Режим доступа. URL: http://blog.redfin.com/devblog/2009/01/improved_geocoding_or_how_i_learned_to_stop_worrying_and_love_the_map.html.

4. Nominatim Wiki, 2013 — [Электронный ресурс] — Режим доступа. URL: http://wiki.openstreetmap.org/wiki/Nominatim.

5. О GPS-координатах замолвите слово, 2011 — [Электронный ресурс] — Режим доступа. URL: http://autodela.ru/main/top/review/GPS_koord.

6. OpenStreetMap — Википедия, Википедия — свободная энциклопедия, 2013 — [Электронный ресурс] — Режим доступа. URL: http://ru.wikipedia.org/wiki/OpenStreetMap.