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?
- Android locationManager sigue llamando onLocationChanged después de removeUpdates
- Obtener la ubicación actual durante el lanzamiento de la aplicación
- Cómo publicar datos utilizando el método POST en Android
- Donde el archivo .apk se coloca en el teléfono después de la instalación
- Android LocationClient.getLastLocation () devuelve la ubicación antigua e inexacta con una nueva marca de tiempo
¡Gracias por adelantado!
- Android: recibe notificación cuando el usuario ingresa en una ubicación específica
- Ubicación de Android getBearing () devuelve siempre 0
- Obtener la ubicación de wifi ip en android
- Evitar que se detecte una ubicación incorrecta con el proveedor de la red
- Obtener la distancia más corta desde un punto
- Android: Location.distancePara no funcionar correctamente?
- Android: Obtener ubicación reciente solamente, no getLastKnownLocation?
- Getlastknownlocation siempre devuelve null después de reinstalar el archivo apk a través de eclipse
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.