Pregunta

Tengo una aplicación que utiliza la API de Google Maps para geocodificar distancias entre pares largos / largos como una forma de mostrar a las personas cercanas a usted en su teléfono (actualmente Android, trabajando en iPhone). El problema es que incluso con un grupo de prueba de 40 usuarios, estamos tomando más de 10 segundos para hacer nuestros cálculos y enviar los resultados a los usuarios. Si bien 10 segundos suenan como mucho tiempo, en realidad no es un problema en lo que respecta a la aplicación cliente porque no es una actualización en tiempo real de las ubicaciones de las personas (las actualizaciones ocurren cada pocos minutos). Obviamente, esto es un problema, ya que obviamente nos encantaría aumentar hasta decenas o incluso cientos de miles de usuarios. Tengo curiosidad por saber si alguien más tiene alguna experiencia en este campo con respecto al uso de la API de Google Maps para calcular distancias entre puntos para grandes volúmenes de datos.

Como comentario aparte, estamos usando Rails en el servidor, que es donde están ocurriendo todos los cálculos de ubicación. Los teléfonos simplemente muestran los mapas y actualizan el servidor con coordenadas lat / long.

¿Fue útil?

Solución

Echa un vistazo a Geokit , es un complemento Ruby Gem and Rails para hacer lo que quieras y Además, creo que estará muy contento con la velocidad y las características también.

Otros consejos

No necesita la API de Google Maps para calcular distancias cuando ya tiene coordenadas de lat / lon. El cálculo de la distancia de gran círculo se puede hacer con la fórmula de Haversine o Vincenty.

Editar: si entiendo su problema correctamente (encontrar ubicaciones cercanas a una ubicación dada en 10,000 registros) solo puedo recomendar el uso de alguna biblioteca geográfica para este propósito. Calcular 10k distancias es una mala idea cuando llegan más solicitudes. Definitivamente deberías buscar algoritmos más inteligentes para eso (un árbol cuádruple parece práctico).

Es posible que desee considerar convertir lat largo a una proyección equidistante localizada antes de hacer cualquier cálculo si está cubriendo un área específica. O más simplemente si cubre áreas globales, convierta el lat largo en las dos zonas UTM más cercanas, almacenando dos conjuntos de coordenadas X Y y las dos ID de zonas UTM. Luego, puede seleccionar registros en las coincidencias de zona UTM primero y llevar a cabo sus cálculos contra ese subconjunto utilizando las coordenadas proyectadas en segundo lugar (que será significativamente más rápido que calcular la distancia desde el lat largo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top