java - puntos - latitud y longitud ejemplos
punto medio entre dos latitudes y longitudes (4)
Debes convertir a radianes. Cámbielo a lo siguiente:
public static void midPoint(double lat1,double lon1,double lat2,double lon2){
double dLon = Math.toRadians(lon2 - lon1);
//convert to radians
lat1 = Math.toRadians(lat1);
lat2 = Math.toRadians(lat2);
lon1 = Math.toRadians(lon1);
double Bx = Math.cos(lat2) * Math.cos(dLon);
double By = Math.cos(lat2) * Math.sin(dLon);
double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By));
double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);
//print out in degrees
System.out.println(Math.toDegrees(lat3) + " " + Math.toDegrees(lon3));
}
Estoy intentando convertir el fragmento de código dado en este http://www.movable-type.co.uk/scripts/latlong.html en java. Pero no obtengo el mismo resultado que el del sitio. Aquí está mi código para encontrar el punto medio entre dos puntos donde se dan sus latitudes y longitudes
midPoint(12.870672,77.658964,12.974831,77.60935);
public static void midPoint(double lat1,double lon1,double lat2,double lon2)
{
double dLon = Math.toRadians(lon2-lon1);
double Bx = Math.cos(lat2) * Math.cos(dLon);
double By = Math.cos(lat2) * Math.sin(dLon);
double lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2),Math.sqrt( (Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By) );
double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx);
System.out.print(lat3 +" " + lon3 );
}
No estoy seguro de si el dLon es correcto o no. Entonces, por favor, ayúdenme chicos a resolverlo. PSI necesita encontrar la latitud y la longitud del punto medio
Mi último trabajo hice un módulo de seguimiento y estaba usando esta fórmula para calcular la distancia entre 2 coordenadas.
//Location lat and lon
double locLat = -23.548333;
double locLon = -46.636111;
//Destination lat and lon
double dstLat = -22.902778;
double dstLon = -43.206667;
double arcoAB = 90 - (dstLat);
double arcoAC = 90 - (locLat);
double difLon = locLon - (dstLon);
double cosA = Math.cos(Math.toRadians(arcoAC)) * Math.cos(Math.toRadians(arcoAB)) + Math.sin(Math.toRadians(arcoAC)) * Math.sin(Math.toRadians(arcoAB)) * Math.cos(Math.toRadians(difLon));
double acosCosA = Math.toDegrees(Math.acos(cosA));
double raio = 2 * Math.PI * 6371;
double distance = (raio * acosCosA) / 360;
return distance; //Distance in KM, convert to anything else (miles, meters..) if you need..
Puedes obtener el punto medio dividiendo la distancia por 2.
Ah, esta otra fórmula también funciona:
double dLat = Math.toRadians(dstLat - locLat);
double dLon = Math.toRadians(dstLon - locLon);
double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+ Math.cos(Math.toRadians(locLat)) * Math.cos(Math.toRadians(dstLat))
* Math.sin(dLon / 2) * Math.sin(dLon / 2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
double d = 6371 * c;
return d; //Distance in KM
Necesita convertir los valores lat y lon utilizados en las otras fórmulas a Radians también. Puedes ver esto en el código ~ 3 / 5ths del camino hacia abajo de la página. La pista fue dada al final de la ley esférica de la fórmula de distancia coseno:
(Tenga en cuenta que aquí y en todos los fragmentos de código subsiguientes, por simplicidad, no muestro las conversiones de grados a radianes, vea a continuación las versiones completas).
incluso más fácil con Android Google Maps Utilities :
LatLngBounds bounds = new LatLngBounds(start, dest);
bounds.getCenter();