Estrategias para gran volumen de geoencoding de ubicación.

Tengo una aplicación que utiliza la API de Google Maps para geocodificar distancias entre pares latinos / largos como una forma de mostrar a las personas cercanas a usted en su teléfono (actualmente Android, funcionando 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 parecen mucho tiempo, no es realmente un problema en lo que respecta a la aplicación cliente porque no es una actualización en tiempo real de la ubicación de las personas (las actualizaciones se producen cada pocos minutos). Obviamente, esto es un problema, ya que obviamente nos encantaría boost decenas o incluso cientos de miles de usuarios. ¿Tengo curiosidad por saber si alguien más tiene experiencia en este campo en cuanto al uso de la API de Google Maps para calcular distancias entre puntos para grandes volúmenes de datos?

Además, estamos usando Rails en el servidor, que es donde se realizan todos los cálculos de ubicación. Los teléfonos simplemente muestran los mapas y actualizan el servidor con coordenadas de latitud / longitud.

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

No necesita la API de Google Maps para calcular distancias cuando ya tiene coordenadas lat / lon. El cálculo de la distancia del círculo máximo se puede hacer usando la fórmula de haversine o de Vincent.

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

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