Android – Как определить, находятся ли координаты на дороге в Google Maps

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

Есть ли какая-либо функция в API Карт Google, которая может мне помочь?

Заранее спасибо!

Насколько я знаю, это невозможно с помощью API Карт Google.

Я считаю, что ваш лучший выбор – использовать набор данных, собранный толпой, такой как OpenStreetMap (OSM) .

Вам нужно будет настроить свою собственную пространственную базу данных (например, PostGIS ) и импортировать данные OSM в базу данных.

Затем вы создадите API-интерфейс на стороне сервера (размещенный на веб-сервере, таком как Tomcat или Glassfish ), чтобы получить текущее местоположение мобильного телефона, буферизовать местоположение с определенным радиусом, чтобы дать вам круговой многоугольник, и выполнить пространственный запрос Через PostGIS, чтобы определить, пересекает ли буфер любые дороги (например, пути с метками «шоссе = первичный» или «шоссе = вторичный», в зависимости от того, какие типы дорог вы хотите включить – см. Этот сайт ) и вернуть true или false Ответ на телефон.

EDIT Aug 2015

Теперь в библиотеке android-maps-utils появился метод PolyUtil.isLocationOnPath() , который позволит вам выполнять этот тип вычислений в самом приложении Android, предполагая, что у вас есть набор точек, составляющих дорогу (или любой Другая линия).

Вот как выглядит код в библиотеке :

  /** * Computes whether the given point lies on or near a polyline, within a specified * tolerance in meters. The polyline is composed of great circle segments if geodesic * is true, and of Rhumb segments otherwise. The polyline is not closed -- the closing * segment between the first point and the last point is not included. */ public static boolean isLocationOnPath(LatLng point, List<LatLng> polyline, boolean geodesic, double tolerance) { return isLocationOnEdgeOrPath(point, polyline, false, geodesic, tolerance); } 

Чтобы использовать эту библиотеку, вам нужно добавить библиотеку в свой build.gradle :

 dependencies { compile 'com.google.maps.android:android-maps-utils:0.4+' } 

Затем, когда у вас есть точка и ваш путь, вам нужно будет преобразовать ваши lat / longs в объекты LatLng (в частности, LatLng point и List<LatLng> line , соответственно), а затем в вашем кодовом вызове:

 double tolerance = 10; // meters boolean isLocationOnPath = PolyUtil.isLocationOnPath(point, line, true, tolerance); 

… чтобы узнать, находится ли ваша точка в пределах 10 метров от вашей линии.

Подробнее о том, как его использовать, см. В Руководстве по началу работы с этой библиотекой.