tipos numeros letras imprimir funciones entrada datos convertir python django geolocation geoip

numeros - ¿La mejor manera de obtener la ciudad más cercana al usuario? Python/Django



string en python (2)

Debe almacenar la latitud y la longitud aproximadas para cada ciudad, calcular la latitud y la longitud en grados para el usuario y luego buscar la distancia con la fórmula de Haversine . Está implementado en Javascript aquí . La API de MaxMind debería darle la latitud y la longitud.

Tengo un sitio web con un número limitado de ciudades en la base de datos, y necesito mostrarle al usuario la ciudad más cercana a su ubicación actual.

Puedo obtener la ubicación por MaxMind API, pero quiero que la ciudad más cercana en mi base de datos sea la ciudad del usuario.

Por ejemplo, si tengo estas ciudades en la base de datos: Los Angeles , San Francisco y New York City , y estoy accediendo desde otra ciudad como Miami , debería ver a NYC seleccionada porque es la más cercana geográficamente.

¿Cuál es la mejor manera de hacer esto rápido y consciente del rendimiento?


Haga que cada vez que agregue una ciudad a su base de datos, se ejecute un código (fuera de línea) que calcule la ciudad más cercana a cada ciudad que tenga. Puede hacer que cada ciudad señale a otra ciudad como su ciudad más cercana con una clave externa.

Ahora que tiene todo precalculado, siempre que haya una solicitud en vivo, con el nombre de una ciudad, solo debe presionar la base de datos con el nombre de la ciudad y puede llegar a la ciudad más cercana con la clave externa que ha especificado. (ciudad --- clave extranjera ---> ciudad)

Ahora eso será muy rápido ya que precalculó la ciudad más cercana fuera de línea y puede devolver el resultado de inmediato en cada solicitud en vivo.

Pero, ¿con qué frecuencia piensas agregar una ciudad? Probablemente no tan a menudo. Por lo tanto, el cálculo previo fuera de línea sería raro incluso si toma un poco de tiempo hacerlo. Pero las solicitudes en vivo se responden muy rápido. (¡Otros ya recomendaron la fórmula a usar para calcular la distancia, así que voy a omitir esa parte!)