Dónde es más necesario crear liceos? Parte II

Un enfoque objetivo utilizando bases de datos geoespaciales

Hector Cotelo

En la primera parte de este análisis, prometí no rendirme en la búsqueda de soluciones desde otros enfoques para lograr determinar dónde hay mayor necesidad en la creación de liceos en nuestro país. Como vimos en el primer capítulo, la solución primaria a la que llegamos no fue del todo convincente (y generó cierta discusión en las redes sociales). No se me ocurría una buena forma de solucionarlo así que hablé con Guillermo Álvarez (Vaadin) y con Andrés Ambrois (Google), amigos que me dejaron la facultad y el liceo, respectivamente. Ambos coincidieron en que la versión más simple del problema es sencillamente buscar los puntos más distantes geográficamente de cada liceo y que eso lo podía hacer tomando una grilla de puntos equidistantes y ordenarlos según su distancia al liceo más próximo.
Entonces busqué cuáles eran los límites del Uruguay para poder hacer mi grilla equidistante de puntos:

Odoo CMS - a big picture

Mas precisamente los puntos serían:  ymax = -30.0508, ymin = -34.9376, xmin = -58.4200 y xmax = -53.1107. Con esos límites podía armar dos bucles anidados e ir incrementando tanto las x como las y en 0.01 para hacer la grilla.

Odoo CMS - a big picture
En total son 259.600 puntos, aproximadamente uno cada 10 cuadras.

.

Odoo CMS - a big picture

Ampliamos en la zona de Montevideo:.

Odoo CMS - a big picture

Una vez con la grilla lo que habría que hacer es hallar la distancia entra cada uno de esos puntos y el liceo que le quede más cerca a cada uno de ellos. Al punto que le quede más lejos el liceo más cercano sería el punto donde construiríamos el primer liceo. Iterando 136 veces tendríamos la posición de cada uno de los liceos que hay que construir.
Pero aún había un problema ¡Uruguay no es cuadrado! Como se ve en la imagen que tiene la grilla de puntos y todo el Uruguay, hay muchos puntos que caen en Argentina, otros en Brasil, otros en el medio del Océano Atlántico. Tenía que encontrar una forma de hacer una georreferenciación reversa ¿Qué es una georreferenciación reversa? Básicamente algo que a partir de una latitud y una longitud te diga la dirección (o al menos el país).
Nuevamente no me quería meter con WS/APIS porque no quería pagar y si no pagás no te dejan hacer consultas masivas. Consulté con Cecilia Guillenea, Federico Balsa y Sergio Garrido (todos Quanams) ya que sabía que en algunos proyectos habían estado trabajando con Geolocalizaciones. 
Sergio me sugirió el servicio web que provee Agesic que tiene unas cuantas funcionalidades pero lamentablemente lo que expone ese WS no me sirve ya que busca por nombres de calles y cosas así y yo lo que tengo es un punto con latitud y longitud.
Ceci me sugirió la visualización de mapas del Cognos 11. La he utilizado y está muy buena, la posibilidad de hacer controles personalizados y la posibilidad de utilizar las funciones avanzadas de la API de Mapbox mediante JavaScript le da una potencia brutal pero cuando la he probado con un volumen importante me truncó en 30k puntos (o algo así), lejos de los 260k que tengo yo.
Fede me sugirió usar geopy que justamente tiene una funcionalidad para que dadas las coordenadas te devuelve el país:

Odoo CMS - a big picture
Odoo CMS - a big picture

Está muy copado y es exactamente lo que necesitaba pero Fede me advirtió que iba a tener problema con el límite de request. Como solución me dijo que podía instalar Nominatim en un server mío.
Nominatim (del latín, por nombre) es una herramienta para buscar datos OSM (OpenStreetMap). El problema que se me presentó fue que aparentemente sólo se puede instalar en distribuciones de Linux (yo uso Windows) y la verdad que no me dio el espíritu para andar levantando máquinas virtuales.
Cuando casi estaba por darme por vencido le comenté en que andaba a Guillermo Dotta (Astropay -además de cuñado-) y me dijo que él para su tesis había usado PostgreSQL y la extensión PostGIS.

Odoo CMS - a big picture

La gracia es que te da tipos de datos nuevos (geométricos: puntos, líneas, polígonos, etc.) y también una troja de funciones que te permiten hacer consultas espaciales (distancia entre puntos, si tal punto está dentro de tal polígono, etc., etc.).
Me puse a investigar un poco y vi que QGIS se llevaba muy bien con PostGIS. QGIS es un Sistema de Información Geográfica (SIG) de código libre que además de conectarse a PostgreSQL también maneja archivos vectoriales shapefile y muchísimas cosas más!

Odoo CMS - a big picture

Con eso ya casi estaba pronto, lo único que necesitaba era encontrar un shapefile con el polígono del Uruguay y ya está, lo importaría en el QGIS, del QGIS a una tabla del PostGIS y a hacer consultas. Por suerte yo ya sabía que en el catálogo de datos abiertos hay shapefiles de un montón de cosas (códigos postales, localidades, etc, etc, etc). 


Odoo CMS - a big picture

Una vez instalada la base de datos y el complemento para que sea geoespacial y con tablas que contengan datos sobre puntos, códigos postales, barrios, secciones y demás hay muchas cosas divertidas que se pueden hacer:
Hallar la distancia entre dos puntos

Odoo CMS - a big picture

Hallar el área de Uruguay

Odoo CMS - a big picture

Buscar localidades grandes que no tengan liceos

Odoo CMS - a big picture
Odoo CMS - a big picture
Odoo CMS - a big picture

Ver cuál es el liceo que le queda más cerca a la localidad más grande que no tiene liceo

Odoo CMS - a big picture
Odoo CMS - a big picture

¿Cuáles son los liceos que quedan más cerca de 21 de Setiembre y Bulevar Artigas?

Odoo CMS - a big picture
Odoo CMS - a big picture

Al tener un mapa con las localidades del Uruguay se me ocurrió que en vez de usar toda la grilla de puntos podía cruzar esta información para que los puntos candidatos estén ubicados en una localidad (es decir, donde vive gente) y no perdidos en el medio de la nada.

Odoo CMS - a big picture

Mapa de localidades de Uruguay

Odoo CMS - a big picture

Grilla cruzada con localidades para reducir cantidad de puntos candidatos



Bárbaro, ahora por medio de una simple Query podemos sacar los lugares a los que les queda más lejos los liceos

Odoo CMS - a big picture

Investiguemos un poco más. Pueblo Quintana según Wikipedia tiene 67 habitantes, Morato 218, Paso de las Piedras de Arerunga no figura. Además, habría que ver que cantidad de esas personas podrían ser el público objetivo como para ir al liceo.
Aparentemente tener en cuenta únicamente que el punto quede en una localidad y que la distancia al liceo más cercano sea muy grande no sirve mucho, habría que tener en cuenta la cantidad de personas en condiciones de asistir al liceo que viven cerca del punto candidato y también información socioeconómica de esa gente. Los especialistas en datascience Patricia Martell, Soledad Gaitán y Fernando López (todos Quanams) ya me habían advertido que no iba a funcionar tan fácilmente.

Es por esto que en la próxima entrega, me dedicaré a profundizar en otro enfoque que me convenza más.