2011-12-21 33 views
9

En mi proyecto tengo que encontrar coordenada (s) [latitud, longitud] desde un punto en distancia de 500 metros (esto podría ser cualquier coordenada aleatoria o una matriz de coordenadas alrededor de mi punto) ¿Cómo puedo hacer esto?convertir metros a latitud longitud desde cualquier punto

Nota: Necesito esto para encontrar varias rutas entre los puntos diferentes de la más corta que se nos devuelve a través de Google Maps Directions Api ... Así que usando mi método definiré el centro de la carretera de A a B y luego encuentre algunas coordenadas debajo y encima de esa posición central y use esto como otro waypoint para ir de A a B - Supongo que esto podría ayudarme a encontrar múltiples caminos ...

¿Alguna sugerencia de profesionales de GIS?

EDIT: la conversión UTM es el más preferible para tales cálculos, y he creado la clase de Java UTM si alguien necesita ..

Respuesta

5

Si entiendo su pregunta correcta que tienen un punto conocido en Lat/Long y necesita calcular el Lat/Long de otro punto o puntos a 500 m de su punto de partida.

Si esto es lo que está haciendo, tiene varias opciones, la mayoría de las cuales involucran API GIS especializadas. Sin embargo, supongo que eres un programador/matemático en lugar de un geógrafo, así que tal vez prefieras optar por utilizar la fórmula de Haversine. Puede encontrar una discusión sobre este tema here más la fórmula.

Una advertencia es que la distancia con la que está trabajando (500m es bastante pequeña) y la Tierra está lejos de ser una esfera perfecta o incluso un esferoide ligeramente aplanado. Es localmente "abultado" y eso puede sacar su cálculo. Si necesita más precisión, tendrá que dar cuenta de estas imperfecciones usando un Datum local apropiado (modelo de la Tierra, hay muchas, por ejemplo, vea EPSG list) y para hacer eso probablemente necesite comenzar a usar las bibliotecas GIS a medida que las matemáticas se pongan muy detallado de lo contrario.

+0

Parece un buen método .. Para saber, estoy intentando lo mismo usando UTM para [lat, long] y viceversa método de cálculos para encontrar coordenadas apropiadas y lat, largo durante los cálculos. Creo que este método también es el mismo que el tuyo, pero solo las fórmulas son diferentes, pero he leído que las fórmulas UTM pueden convertir ubicaciones exactamente en centímetros ... ¡Por cierto, muchas gracias por tu respuesta! –

+2

UTM ya explica la deformación local de la superficie de la Tierra al dividir la Tierra en un gran número de zonas, cada una con su propio dato. Es por eso que es mucho más preciso que, digamos, WGS, que usa una sola proyección para toda la Tierra. Si necesita herramientas para convertir a coordenadas cartesianas: calcule sus puntos y conviértalas de nuevo a Lat/Long sin preocuparse por las matemáticas, consulte GDAL/OGR (y especialmente OSR, que es la API de referencia espacial) – MappaGnosis

0

Este es el código utilizado por Google Map (SphericalUtil.java)

// from SphericalUtil.java 
    // compile 'com.google.maps.android:android-maps-utils:0.4.4' 
    public static LatLng computeOffset(LatLng from, double distance, double heading) { 
    distance /= 6371009.0D; //earth_radius = 6371009 # in meters 
    heading = Math.toRadians(heading); 
    double fromLat = Math.toRadians(from.latitude); 
    double fromLng = Math.toRadians(from.longitude); 
    double cosDistance = Math.cos(distance); 
    double sinDistance = Math.sin(distance); 
    double sinFromLat = Math.sin(fromLat); 
    double cosFromLat = Math.cos(fromLat); 
    double sinLat = cosDistance * sinFromLat + sinDistance * cosFromLat * Math.cos(heading); 
    double dLng = Math.atan2(sinDistance * cosFromLat * Math.sin(heading), cosDistance - sinFromLat * sinLat); 
    return new LatLng(Math.toDegrees(Math.asin(sinLat)), Math.toDegrees(fromLng + dLng)); 
} 

Para usarlo, sólo tienes que entrar en el centerLatLng, la distancia en metros, y el rumbo en grados de centerLatLng.

puede cambiar la fórmula al idioma de su preferencia.

Cuestiones relacionadas