Cómo establecer cuál es el punto más cercano a un código postal

Por Luz María Ramírez Romero y Ana Berenice Rodríguez Lorenzo

Recientemente le solicitaron a la Dirección de Colaboración y Vinculación de la DGTIC, incorporar una funcionalidad en un sistema de información para encontrar el punto más cercano a un código postal, de entre una lista de opciones.  Fue un reto de programación bastante interesante y a continuación compartiremos cómo lo solucionamos.

Se indagaron posibles alternativas: encontrar patrones en las numeraciones de los códigos postales para saber si las numeraciones parecidas eran cercanas geográficamente; la posibilidad de definir cuadrantes que proporcionaran una referencia sobre la ubicación de un punto en un mapa; la identificación de rangos de códigos postales por zona geográfica; el uso de la API de Google Maps; y la utilización del software GeoGebra en conjunto con diagramas de Voronoi.

Dado que el tiempo y los recursos disponibles eran un factor importante y limitativo, todas las opciones anteriores se descartaron. En particular se determinó que no eran viables tanto la alternativa de usar la solución de Google Maps, que cuenta incluso con una API específica para el cálculo de distancias (Distance Matrix API), pero que requiere suscripción, como la implementación de diagramas de Voronoi, pues implicaba una inversión de tiempo significativa por la complejidad para crear un modelo de los polígonos que se requerirían para llevar a cabo el cálculo.

Sin embargo, la labor de indagación de las alternativas mencionadas rindió fruto, puesto que llevó a la identificación de un dato que fue crucial para la solución: “podíamos identificar las coordenadas geográficas por cada código postal”. A partir de ello, los esfuerzos se enfocaron en la obtención de un algoritmo que permitiera medir la distancia entre dos puntos a través de su latitud y longitud.  Con estos dos datos, el problema se redujo a calcular distancias y elegir entre la más corta entre ellas.

Al implementar la fórmula de Haversine utilizando funciones matemáticas del lenguaje de programación se encontró una solución simple y efectiva, sin embargo, se decidió utilizarla a través de funciones del gestor de bases de datos, lo que hace más eficiente la obtención del resultado, disminuyendo la carga del procesador.

En esta actividad también participaron los becarios de la línea de Ingeniería de Software: Victoria Carolina Cruz Gutiérrez, Wendy Hernández Méndez, Arianna Jatziri Ortega Hernández y Luis Felipe Zamora Bello.

 

Atención a usuarios