Android – Cómo determinar si las coordenadas se encuentran en la carretera en Google Maps

Tengo que hacer un cheque en mi aplicación que determina si las coordenadas dadas se encuentran en la carretera o no en Google Maps.

¿Hay alguna función en Google Maps API que pueda ayudarme con eso?

¡Gracias por adelantado!

Por lo que sé, esto no se puede hacer con la API de Google Maps.

Creo que su mejor opción es utilizar un conjunto de datos de fuentes de público como OpenStreetMap (OSM) .

Tendría que configurar su propia base de datos espaciales (por ejemplo, PostGIS ) e importar datos OSM a la base de datos.

A continuación, crearía una API del lado del servidor (alojada en un servidor web como Tomcat o Glassfish ) para recibir la ubicación actual del teléfono móvil, almacenar en búfer la ubicación con un cierto radio para darle un polígono circular y realizar una consulta espacial A través de PostGIS para determinar si el búfer intersecta cualquier camino (por ejemplo, formas con etiquetas de "highway = primary" o "highway = secondary", dependiendo de qué tipos de carreteras desea incluir – vea este sitio ) y devuelva el verdadero o falso Respuesta al teléfono.

EDIT Ago 2015

Ahora hay un método en la biblioteca android-maps-utils llamada PolyUtil.isLocationOnPath() que te permitiría hacer este tipo de cálculo dentro de tu propia aplicación Android, asumiendo que tienes el conjunto de puntos que componen el camino (o cualquier otro). Otra línea).

Esto es lo que parece el código en la biblioteca :

  /** * 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); } 

Para usar esta biblioteca, necesitará agregar la biblioteca a su build.gradle :

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

Luego, cuando tenga su punto y su ruta, necesitará convertir sus lat / longs a objetos LatLng (específicamente, un LatLng point y una LatLng point List<LatLng> line , respectivamente) y, a continuación, en su llamada de código:

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

… para ver si su punto está dentro de 10 metros de su línea.

Consulte la Guía de introducción para esta biblioteca para obtener más información sobre cómo utilizarla.

  • Android: cómo arreglar gps con simulacros (falso) de coordenadas?
  • ¿Cómo puedo obtener el nombre de la ciudad de mi posición actual?
  • Android- misma ubicación GPS repetir sin actualizar
  • ¿Cómo obtener la posición GPS actual sin esperar cambios de ubicación en Android?
  • Comprueba si está habilitado 'Acceso a mi ubicación' - Android
  • Problemas con android.location.geocoder
  • Obtener la ubicación actual rápida y una vez en android
  • IllegalArgumentException: el proveedor no exisit: null en Maps V1
  • ¿Cómo puedo obtener las coordenadas de un mapa al toque con MapFragment (no MapView)?
  • La API de ubicación de Google Play Service devuelve una ubicación incorrecta a veces
  • API de ubicación de Google: solicita actualizaciones de ubicación con intención pendiente?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.