Obtener los siguientes N puntos geográficos más cercanos

Tengo en mi aplicación de Android una tabla de base de datos con geo pointes (lat y lon son valores de grado decimal), alrededor de 1000 puntos. Y necesito seleccionar el punto más cercano a un determinado punto geográfico.

He encontrado en Stackoverflow la respuesta a la forma de calcular la distancia entre dos puntos geo y fue muy feliz, hasta que traté de escribir mi consulta. He descubierto, que no es posible utilizar funciones trignometrical en built-in sqlite de android.

Pero entonces tengo una Idea. Realmente no necesito calcular distancia. El próximo punto es otro que la menor diferencia en sus coordenadas geográficas debe ser.

¿Cómo podría usar este hecho? ¿Sería suficiente pedir puntos guardados por (lat_0 – lat_n) ^ 2 + (lon0-lon_n) ^ 2, donde lat_0 y lon_0 son coordenadas geográficas de un punto dado?

Gracias,

Mur

UPD

Así pues, la mejor manera de obtener una respuesta para mi pregunta era probar el acercamiento que describo arriba.

Funciona bastante bien pero no exactamente comparado con la distancia exacta.

Así que si sólo necesitas calcular una distancia, esta solución está bien, pero en mi caso también necesitaba ordenar estaciones por distancia y no podía usar esta solución.

Mis gracias van en John en CashCommons y Philip. Gracias chicos

3 Solutions collect form web for “Obtener los siguientes N puntos geográficos más cercanos”

Si sus puntos están separados dentro de una ciudad (más o menos), esa aproximación funcionará bien. La aproximación se desmorona si vas por todo el mundo, sin embargo.

EDIT: Basado en el comentario de Philip a continuación, debe escalar uno de los componentes. Alemania está a unos 50 grados de latitud norte, por lo que multiplicar la longitud por (cos 50 grados) será mejor.

Sí. 🙂 La distancia real es sqrt ((lat_0 – lat_n) ^ 2 + (lon0-lon_n) ^ 2) pero el ordenar por (lat_0 – lat_n) ^ 2 + (lon0-lon_n) ^ 2 es suficiente.

Hmm … No estoy seguro de cómo funcionaría ese pedido? ¿No necesitaría un orden diferente para cada punto para indicar que es vecinos.

La solución más simple es simplemente iterar a través de todos los puntos y calcular la distancia geométrica entre los puntos. Para 1000 puntos esto debería suceder bastante rápido.

La solución más optimizada (en términos de velocidad de recuperación) es calcular los vecinos de cada punto cuando se insertan en la base de datos. Por ejemplo, puede mantener la lista de ids como una cadena de comas separadas e insertar en la base de datos ?. Entonces, cuando necesitas vecinos someones que hacer directamente a ellos. Sin embargo esto va a convertirse en un dolor si necesita insertar nuevos puntos. Básicamente tendrá que volver a calcular los vecinos.

  • Base de datos no copiar desde activos
  • ¿Por qué los Cursores Android comienzan antes de la primera fila de resultados y terminan después de la última fila?
  • SqliteException ocupado iOS / Android Xamarin MVVMCross
  • Cómo ignorar el acento en la consulta SQLite (Android)
  • Obtención de una excepción SQLiteCantOpenDatabaseException
  • ¿Cómo mostrar los datos de la base de datos en un RecyclerView con alto rendimiento?
  • IntelliJ Permiso de SQLite denegado en Android Lollipop, trabajado antes
  • Android / ORMLite Insertar fila con ID
  • Cómo convertir msgstore.db.crypt7 a msgstore.db desde whatsapp en android?
  • Cómo debo abrir y cerrar mi base de datos correctamente
  • ¿Cómo obtener el valor de la columna desde el cursor sqlite?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.