Catálogo de suelo industrial y centros de empresas de la provincia de Sevilla
Presentamos esta vez un proyecto de modernización del catálogo de suelo industrial y centros de empresa que desde hace años lleva manteniendo Prodetur, sociedad instrumental de la Diputación de Sevilla.
Los principales retos que planteó este proyecto fueron: la migración de los datos desde su plataforma anterior, la integración con la plataforma de mapas de Google y los ajustes necesarios para que estos últimos, de una forma eficiente, mostraran los cerca de 30.000 espacios y centros de empresa.
Migración desde Drupal 7
El sistema anterior había sido desarrollado en Drupal 7, así que una de las tareas más importantes era mantener los datos catalogados en el nuevo sistema.
Para el desarrollo de esta migración utilizamos tanto los módulos de migraciones incluidos en el núcleo de Drupal, como otros contribuidos por la comunidad y pequeños añadidos desarrollados a medida.
El sistema de migraciones de Drupal permite definirlas como archivos de texto donde se describe, para cada una de ellas: cuál es su origen, cómo se procesan sus datos y cuál es su destino. Estas migraciones pueden, una vez definidas, ejecutarse (total o parcialmente). Esto permite comprobar que los contenidos se han migrado correctamente. También permite revertir las importaciones, borrando todo el contenido creado. Así, se reducen los ciclos de feedback y se acelera lo que de otra manera es un procedimiento largo y tedioso.
Además, el sistema es extensible utilizando plugins: de Drupal, lo que permite adaptar cada migración a las necesidades específicas de cada proyecto. Por ejemplo, en este proyecto, cada empresa (de las que se migraron cerca de 9.000) define su actividad con un código CNAE (una clasificación estándar de actividades económicas en España). Los códigos CNAE son de hasta ocho dígitos y se organizan en árbol. Así, las actividades con más dígitos definen más concretamente la actividad realizada. Para mejorar la utilidad del sitio, se decidió reducir los dígitos de los códigos almacenados, permitiendo así hacer búsquedas más sencillas. Esto se desarrolló con un pequeño plugin que procesó los valores CNAE durante la migración.
Integración con Google Maps
El núcleo de la plataforma son los mapas que muestran la localización de cada uno de los elementos catalogados.
Después de varios prototipos, se optó por utilizar una integración basada en los módulos contribuidos para la edición de los contenidos y de una solución headless para la parte pública del sitio.
El módulo contribuido utilizado, Geofield, amplía el sistema añadiendo un tipo de campo para almacenar coordenadas (tanto simples como múltiples en formato GeoJSON o KML) y de diferentes elementos de formulario, como un buscador que se integra con Google Places o un mapa donde es posible hacer clic en la localización exacta.
La parte pública del sitio se enfrentaba con el reto de mostrar hasta casi 30.000 elementos al mismo tiempo. Por esto se optó por una solución headless, donde Drupal genera servicios web que luego el código JavaScript del navegador del usuario descarga, muestra y filtra de forma eficiente, como explicamos en el siguiente punto.
Ajustes de rendimiento
Mostrar cerca de 30.000 elementos en una misma página es todo un reto. Drupal puede generar servicios web de forma eficiente, dispone de una inmejorable capa de caché para ello, pero 30.000 elementos son demasiados. Los listados convencionales, donde los elementos se muestran uno tras otro, utilizan paginadores, pero esta opción, en un mapa, no es viable.
La primera decisión al respecto fue la de separar la generación del mapa de la generación de los elementos que muestra. Esto nos permitió crear una página estática que los usuarios descargan sin tener que esperar y que se encarga de descargar la información de cada uno de los elementos a mostrar.
También, para mejorar el tiempo de descarga de estos elementos, se utilizó el módulo Search API para generar un índice con la información preparada para su consumo. Drupal, al generar los listados, carga cada uno de los elementos en memoria, ejecutando todo su ciclo de carga en este momento y elevando los tiempos de generación de los listados a minutos. Seach API, en cambio, permite declarar qué datos se van a explotar y los prepara en el momento en que se insertan o actualizan nuevos contenidos para que generar los listados sea mucho más rápido.
Del lado del navegador, en el código JavaScript, también se realizaron algunas optimizaciones.
Aprovechando la paginación disponible en los listados de Drupal, se descargan los datos en conjuntos de 2.500 elementos. Todas las peticiones se hacen en paralelo, permitiendo así que sea el navegador quien las gestione en sus colas de descarga. Dependiendo del navegador, se ha observado que se descargan, en paralelo, hasta seis de estas páginas.
Se implementó la agrupación de puntos. Esta funcionalidad, llamada clustering, agrupa automáticamente los puntos según su distancia, creando marcadores que hacen zoom en los puntos contenidos al hacer clic en ellos.
Se añaden en el mapa, en cada momento, solo los puntos visibles. Cada vez que el usuario mueve el mapa, desplazándose por él o haciendo zoom, se revisan los puntos visibles, añadiendo o eliminando los marcadores que sea necesario. Esto mejora su fluidez y hace viable su uso.
¿Te interesan nuestros servicios?
Atenea tech
Pl. Can Suris s/n, Citilab08940 Cornellà de Llobregat (Barcelona)
+34 634 521 733
hola@ateneatech.comSuscríbete a nuestra newsletter


