Índice
Introducción
QCAD viene con dos herramientas de línea de comandos para crear mosaicos de mapas para su uso con visualizadores de mapas en línea como Leaflet. Leaflet es una biblioteca JavaScript para trabajar con mapas interactivos en un navegador.
Presentación de un dibujo en línea
El caso de uso más sencillo para un mapa en línea es proporcionar a los visitantes de un sitio web una vista interactiva y ampliable de un dibujo.
He aquí un ejemplo que genera los mosaicos del mapa para cualquier archivo de dibujo dado:
dwg2maptiles -z 0-6 -c -b blanco -hq-postfix=@2x -a -o ruta/a/salida/directorio dibujo.dxf
El modificador -z especifica los niveles de zoom a generar, aquí desde el nivel de zoom 0 hasta el nivel de zoom 6. Esto significa que partiendo del nivel 0 (dibujo entero de zoom automático), el usuario puede hacer zoom 6 veces hasta alcanzar el límite. Cada vez que el usuario hace zoom, el dibujo se amplía en un factor de 2, por lo que con 6 niveles de zoom, el usuario puede hacer zoom en un factor de 2^6 (=64). Generar más niveles de zoom requiere más tiempo y espacio en disco. Cada nivel de zoom adicional suele requerir cuatro veces más tiempo y espacio en disco para generarse que el anterior.
Los mosaicos se generan en el directorio de salida dado (-o) con la estructura de directorios y nombres de archivo estándar para mosaicos de mapas (z/x/y.png).
En el ejemplo anterior, queremos que el dibujo se renderice sobre un fondo blanco (-b blanco). Las líneas blancas deben corregirse a negro para asegurarnos de que todas las líneas son visibles (-c).
El argumento -hq-postfix=@2x indica a dwg2maptiles que genere mosaicos de alta calidad (hq, high-res, retina) a 512x512px junto con los mosaicos de resolución estándar a 256x256px.
Para aumentar aún más la calidad, también utilizamos el modificador -a para el antialiasing.
He aquí el resultado de la visualización de un dibujo interactivo de este tipo generado con dwg2maptiles:
Generación de mosaicos de mapa georreferenciados
dwg2maptiles también puede utilizarse para generar superposiciones exactas de mapas del mundo. Para ello, normalmente hay que transformar un dibujo desde un sistema de coordenadas local a coordenadas Web Mercator como las que suelen utilizar los mapas en línea.
QCAD Professional viene con una herramienta de línea de comandos independiente para transformar dibujos de un sistema de referencia de coordenadas (CRS) a otro: dwgmapconvert.
normalmente, dwgmapconvert se utiliza para convertir todas las coordenadas de un archivo de dibujo determinado de un sistema de coordenadas local conocido al sistema de coordenadas EPSG:3857 (a veces denominado "Web Mercator"). Este es el sistema de coordenadas utilizado por la mayoría de los mapas en línea, por ejemplo Google maps o mapbox. Para utilizar un dibujo como entrada para dwg2maptiles y producir mosaicos de mapas georreferenciados, el dibujo debe estar en el sistema de coordenadas EPSG:3857.
En el sistema de coordenadas EPSG:3857, todo el mapa del mundo cabe en un cuadrado de 20037508,3427892m en el nivel de zoom 0. Si se convierte un dibujo a este sistema de coordenadas, el dibujo se transforma de forma que quepa en ese cuadrado mundial y que el dibujo se sitúe en las coordenadas mundiales proyectadas correctas.
Por ejemplo, si un dibujo se creó en EPSG:2056 (también LV95, el sistema de coordenadas local suizo), puede transformarse a EPSG:3857 con dwgmapconvert de la siguiente manera:
dwgmapconvert -segment-length=0,5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o dibujo_epsg3857.dxf dibujo_epsg2056.dxf
Dado que las proyecciones cartográficas suelen ser no lineales, las curvas y las líneas más largas deben dividirse en pequeños segmentos de línea que luego pueden proyectarse de forma no lineal. Si se proporciona el modificador -longitud-de-segmento, dwgmapconvert realiza esta segmentación automáticamente, utilizando la longitud de segmento dada. La longitud del segmento se especifica en unidades de dibujo del dibujo original (aquí Meter).
-crs-in se utiliza para especificar el sistema de coordenadas de entrada, aquí EPSG:2056.
-crs-out se utiliza para especificar el sistema de coordenadas de salida, que debe ser EPSG:3857 si la salida debe utilizarse posteriormente con dwg2maptiles.
Generación de mosaicos de mapa
Una vez que hemos convertido el dibujo a coordenadas EPSG:3857, podemos utilizar dwg2maptiles para generar los mosaicos para la capa superpuesta en leaflet:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o ruta/a/salida/directorio dibujo_epsg3857.dxf
Tenga en cuenta que debemos pasar el modificador -web-mercator a dwg2maptiles para hacerle saber que no debe realizar un zoom automático sino generar una superposición de mapa en las coordenadas EPSG:3857 exactas a las presentes en el archivo.
-skip-empty indica a dwg2maptiles que no genere mosaicos que no contengan ninguna parte del dibujo. Sin este interruptor, se generarán 2^zoomLevel azulejos por nivel de zoom. Eso sería 4'194'304 azulejos para el nivel de zoom 22. Dado que es muy probable que un dibujo superpuesto sólo cubra una parte muy pequeña del mapamundi, este conmutador debería utilizarse siempre al crear mapas superpuestos.
-b transparente establece el fondo en transparente, para que el mapa pueda utilizarse como superposición de un mapamundi existente (por ejemplo, Google Map, mapbox, etc.). Para controlar el color en el que se muestran las líneas negras o blancas, el fondo puede fijarse en negro transparente o blanco transparente con -b "#00ffffff" (fondo blanco transparente, líneas negras) o -b "#00000000" (fondo negro transparente, líneas blancas) respectivamente. Asegúrese de pasar también el modificador -c en este caso para forzar la corrección automática del color.
El argumento -hq-postfix=@2x puede utilizarse para generar mosaicos de alta resolución (512px) además de los mosaicos normales de 256px. El valor "@2x" se recomienda y se utiliza ampliamente para los mosaicos de alta resolución, también en leaflet. Con este interruptor, por cada mosaico de baja resolución "N.png", se crea un mosaico de alta resolución "[email protected]".
Uso de múltiples procesos (y núcleos de CPU)
La generación de mosaicos de mapa puede ser una tarea intensiva para la CPU, dependiendo de los niveles de zoom, la complejidad del dibujo y otros ajustes.
Para generar mosaicos de mapa más rápidamente, puede dividir el trabajo entre varios núcleos de CPU disponibles. Para ello, dwg2maptiles ofrece el modificador -s para generar sólo una porción de los mosaicos necesarios. El modificador -s espera dos parámetros separados por comas: la rebanada a generar y el número total de rebanadas utilizadas. Por ejemplo -s 1,4 generaría la primera rebanada de cuatro rebanadas en total. Para generar todos los azulejos del ejemplo anterior utilizando cuatro núcleos de CPU, podría ejecutar
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparente -o ruta/a/salida/directorio dibujo_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparente -o ruta/a/salida/directorio dibujo_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 3,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 4,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &wait
Por supuesto, también podría dividir las tareas por niveles de zoom o utilizar rebanadas sólo para los niveles de zoom más altos y un único proceso para todos los niveles de zoom más bajos (más baratos), etc.
Ejemplo
En este ejemplo, aportamos dos capas superpuestas al mapa del cantón suizo de Zúrich: la zona forestal protegida y los corredores de fauna. Los datos originales venían en coordenadas EPSG:2056 (LV95) y se transformaron a EPSG:3857 utilizando dwgmapconvert.