Page 52 - Ingeniantes 521 interactivo
P. 52

Revista Ingeniantes 2018 Año 5 No. 2 Vol. 1

                                                                 al menos la condición que el polígono formado por los
                                                                 puntos del área de influencia intersecte el punto forma-
                                                                 do por las coordenadas de un registro en la tabla, para
                                                                 lo cual se usa ST_Intersects(). El resto de los filtros se
                                                                 concatenan con el conector booleano.

Figura 5. Mensaje de alerta para reemplazar filtros específicos  Posteriormente, los resultados de la consulta SQL se
por una búsqueda general sin filtros.                            devuelven en una cadena JSON con objetos anidados
                                                                 de 3 valores asociados a estas llaves: latitud y longitud
Figura 6. Mensaje de alerta para reemplazar una capa sin fil-    del elemento, y capa a la que pertenece para identificar
tros por filtros específicos.                                    el marcador a utilizar en el mapa. El frontend realiza la
                                                                 conversión de coordenadas UTM (formato de Catastro)
Además de estas validaciones, existen otros 5 tipos de           a decimales (formato de OpenStreetMap) con la librería
mensajes de alerta, entre ellos el más importante es el          proj4.js.
trazado de un área de influencia inválida (Figura 7). Esto       Para el conteo de los elementos influyen los conectores
sólo aplica cuando el área sea un polígono de forma li-          OR y AND. Con el conector OR, la cantidad total mos-
bre y la función ST_GeomFromText() en el backend re-             trada corresponde a cada filtro, es decir, cuántos ele-
torne nulo. MariaDB 10.1.x, a diferencia de MySQL 5.6.x en       mentos cumplen solamente esa condición en particular.
adelante no soporta ST_IsValid() que retorna 1 o 0 si el         Los totales en cada fila de la tabla son independientes.
polígono es válido o no, respectivamente [7].                    Dado que no es necesario que se satisfagan todas las
                                                                 condiciones, un filtro puede tener un total de 0 y aun así
Figura 7. Ejemplo y mensaje de alerta de un área de influencia   pueden aparecer marcadores en el mapa si se satisfa-
inválida.                                                        ce otro filtro de la misma capa. Con el conector AND, la
                                                                 cantidad total mostrada es siempre igual para todos los
                                                                 filtros de una misma capa; si los campos no son cohe-
                                                                 rentes (por ejemplo: un poste no puede ser de madera
                                                                 y metal a la vez) los resultados obtenidos son siempre 0.
                                                                 Si se realiza una consulta con un solo filtro específico, o
                                                                 una búsqueda general sin filtros en una capa, la cantidad
                                                                 total mostrada es igual independientemente del conec-
                                                                 tor seleccionado.
                                                                 Finalmente, una consulta SQL adicional ocurre cuando
                                                                 se pulsa sobre un marcador. Las coordenadas decima-
                                                                 les del punto son convertidas a UTM con proj4.js y se
                                                                 busca el elemento en la tabla de la base de datos don-
                                                                 de coincidan las coordenadas y el nombre de la capa
                                                                 obtenidos a partir de los 3 valores del JSON almace-
                                                                 nado temporalmente en la caché del navegador web.
                                                                 Esta consulta selecciona todas las columnas disponibles
                                                                 de la tabla y se muestra en un cuadro no modal (Figura
                                                                 8). Con proj4.js se reemplazan de nuevo las coordena-
                                                                 das UTM del punto por su equivalente en decimal y se
                                                                 añade un enlace a Google Maps a fin de que el usuario
                                                                 encuentre datos específicos sobre un predio, entre ellos
                                                                 reseñas, horarios, fotografías e información de contacto;
                                                                 o tenga acceso a otras herramientas como obtener di-
                                                                 recciones y buscar lugares cercanos.

Mediante una petición AJAX, el backend recibe como               Figura 8. Despliegue de información de un marcador en un
parámetros la tabla de filtros, un array de coordenadas          cuadro no modal.
UTM de los vértices del área de influencia y el operador
booleano OR o AND seleccionado. Según la cantidad
de capas (tablas en la base de datos), crea n consultas
SQL default para después reemplazar los valores de los
parámetros recibidos. En cada cláusula WHERE existe

48
   47   48   49   50   51   52   53   54   55   56   57