una ruta puntos medir google geograficos entre earth distancias distancia como ciudades calcular android google-maps-api-3 polyline

ruta - ¿Cómo puedo calcular una distancia actual a los puntos de la polilínea en google maps v2 en Android?



medir distancias en google earth (1)

He usado el tutorial del siguiente enlace para mostrar la ruta del mapa de Google en la aplicación de Android. Mi pregunta es ¿cómo puedo calcular la distancia a los puntos de la polilínea en el mapa? Como cuando uso la aplicación Google maps y me dice cuándo se está acercando un giro en la calle. Quiero implementar una característica similar en mi aplicación. Puedo mostrar la ruta de la polilínea en el mapa y se actualiza mientras conduzco, pero quiero que me avise 500 pies antes de un próximo turno. ¿Cómo puedo hacer eso?

Aqui esta el link:

http://jigarlikes.wordpress.com/2013/04/26/driving-distance-and-travel-time-duration-between-two-locations-in-google-map-android-api-v2/


Yo uso este método para marcadores. Suponiendo que tiene Latitud y Longitud de los puntos que componen la Polilínea, esto debería hacer:

public class MapUtils { public static float distBetween(LatLng pos1, LatLng pos2) { return distBetween(pos1.latitude, pos1.longitude, pos2.latitude, pos2.longitude); } /** distance in meters **/ public static float distBetween(double lat1, double lng1, double lat2, double lng2) { double earthRadius = 3958.75; double dLat = Math.toRadians(lat2 - lat1); double dLng = Math.toRadians(lng2 - lng1); double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double dist = earthRadius * c; int meterConversion = 1609; return (float) (dist * meterConversion); } }

Para determinar si el camino gira, miraría el ángulo euclidiano entre los vectores (x es la ubicación actual y y es un punto de la polilínea)

Simplemente tome su ubicación actual y un LatLng desde lejos para esto.

El cálculo se basa en: http://en.wikipedia.org/wiki/Euclidean_space#Angle

Location currentLocation; // obtained somewhere in your code LatLng polylinePoint; // a point further ahead double cLat = currentLocation.getLatitude(); double cLon = currentLocation.getLongitude(); double pLat = polylinePoint.latitude; double pLon = polylinePoint.longitude; double angle = Math.acos( (cLat*pLat+cLon+pLon) / norm(cLat,cLon)*norm(pLat,cLon)); private double norm(double x, double y) { return Math.sqrt(Math.pow(x, 2)*Math.pow(y, 2)); }

Esto no se ha probado, por lo que podría contener un error.