Detectar si está a un kilómetro del punto de interés

Tengo una pregunta interesante. Tengo un valor de latitud de 51.445376 y un valor de longitud de -0.190624 (como un ejemplo, decir que esto fue recibido por un oyente de la localización de los androides). Esta ubicación en particular (y sus valores) es un punto de interés y se almacena en mi base de datos. Estoy utilizando un oyente de localización en mi Android, y enviaré a los usuarios la ubicación actual al servidor para detectar si el usuario ha llegado a un radio de un kilómetro de ese punto particular de interés. ¿Alguien sabe qué algoritmo utilizar para comprobar si los usuarios actual longitud y latitud está dentro de ese radio de un kilómetro del punto de interés de longitud y latitud? O algo que pueda ver?

Tal vez alguien me podría ayudar, ya que mis matemáticas no es la más grande del mundo.

Para coordenadas geográficas, utilice esta función (dominio público):

public static double distanceInKM( double latStart,double lonStart, double latEnd,double lonEnd ){ latStart=Math.toRadians(latStart); latEnd=Math.toRadians(latEnd); return 6370.997*Math.acos( Math.cos(Math.toRadians(lonEnd - lonStart))*Math.cos(latStart)* Math.cos(latEnd)+Math.sin(latStart)*Math.sin(latEnd)); } 

Existen al menos dos maneras populares de calcular la distancia geográfica: el método de Haversine y el método de Vincenty. Aunque Vincenty es extremadamente preciso, también es un poco complicado para sus necesidades. El método anterior muestra una función de distancia basada en la ley esférica de los cosenos.

Este mensaje de 2008 podría ser útil .

Enlaza a una descripción de MovableType de cómo utilizar la fórmula de Haversine para calcular la distancia entre dos puntos en una esfera. Es importante tener en cuenta que no es 100% exacta ya que la Tierra no es una esfera perfecta (su radio ecuatorial es de unos 20 km diferente de su radio polar), pero debe ser suficiente para sus necesidades.

El enlace MovableType también describe cómo usar una proyección equi-rectangular (traducción de coordenadas lat / long a rectangulares) y el teorema pitagórico para determinar una aproximación más áspera (pero más rápida) de la distancia (buena para pequeñas distancias de ~ 1-2km. )

Una solución simple: Simplemente encuentre la distancia, encontrando primero dx y dy.

Digamos que tengo el punto 1 (p1) y el punto 2 (p2)

Dx = p2.x – p1.x; Dy = p2.y – p1.y;

Ahora encuentre la distancia d como sigue

D = sqrt (dx ^ 2 + dy ^ 2)

En un lenguaje de programación como java, puede utilizar las siguientes líneas:

 double d = Math.sqrt(dx*dx + dy*dy); 

Espero que esto ayude como su punto de partida!

Nota: x & y debe ser calculado en consecuencia para su lat & lon info. Iba a escribir un fragmento de código corto, pero vi a alguien más tiene una buena solución (me upvoted su respuesta).

  • Problema básico de conversión imperial
  • ¿Cómo inserto caracteres especiales como texto en el editor de XML para Android?
  • Rectángulo Coordina con Respecto al Ángulo de Rotación
  • ¿Cuál es la mejor práctica para redondear un flotador a 2 decimales?
  • Determinación de números pares / impares (enteros)?
  • MathML y ​​Java
  • Desplazamiento pequeño al calcular la rotación en función del punto de contacto
  • Android - Ajuste de la posición de la vista de imagen en la parte superior de una vista de imagen con zoom
  • La mejor práctica para calcular la velocidad media de las coordenadas GPS
  • Calcular el ángulo del punto tocado y rotarlo en Android
  • ¿Debo confiar en Android para descartar los sorteos fuera de pantalla?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.