Gerar ladrilhos de mapa
Introdução
Seção intitulada “Introdução”O QCAD vem com duas ferramentas de linha de comando para criar ladrilhos de mapa para uso com visualizadores de mapas on-line como o Leaflet. O Leaflet é uma biblioteca JavaScript para trabalhar com mapas interativos em um navegador.
Apresentar um desenho on-line
Seção intitulada “Apresentar um desenho on-line”O caso de uso mais simples para um mapa on-line consiste em fornecer aos visitantes de um site uma vista interativa e com zoom de um desenho.
Aqui está um exemplo que gera os ladrilhos de mapa para qualquer arquivo de desenho:
dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxfO interruptor -z especifica os níveis de zoom a gerar, aqui do nível de zoom 0 ao nível de zoom 6. Isso significa que, a partir do nível 0 (desenho inteiro ou zoom automático), o usuário pode ampliar 6 vezes até atingir o limite. Cada vez que o usuário amplia, o desenho é ampliado por um fator de 2, de modo que, com 6 níveis de zoom, o usuário pode ampliar por um fator de 2^6 (=64). Gerar mais níveis de zoom requer mais tempo e espaço em disco. Cada nível de zoom adicional normalmente requer quatro vezes mais tempo e espaço em disco para ser gerado do que o anterior.
Os ladrilhos são gerados no diretório de saída dado (-o) com a estrutura de diretórios e os nomes de arquivo padrão para ladrilhos de mapa (z/x/y.png).
No exemplo acima, queremos que o desenho seja renderizado sobre um fundo branco (-b white). As linhas brancas devem ser corrigidas para preto para garantir que todas as linhas sejam visíveis (-c).
O argumento -hq-postfix=@2x diz ao dwg2maptiles para gerar ladrilhos de alta qualidade (hq, alta resolução, retina) de 512x512px além dos ladrilhos de resolução padrão de 256x256px.
Para aumentar ainda mais a qualidade, também usamos o interruptor -a para suavização de serrilhado (antialiasing).
Ver exemplo com Leaflet online
Gerar ladrilhos de mapa georreferenciados
Seção intitulada “Gerar ladrilhos de mapa georreferenciados”O dwg2maptiles também pode ser usado para gerar sobreposições exatas para mapas do mundo. Para isso, um desenho geralmente precisa ser transformado de um sistema de coordenadas local para coordenadas Web Mercator, como as comumente usadas por mapas on-line.
O QCAD Professional vem com uma ferramenta de linha de comando separada para transformar desenhos de um sistema de referência de coordenadas (CRS) para outro: dwgmapconvert.
O dwgmapconvert é normalmente usado para converter todas as coordenadas em um dado arquivo de desenho de um sistema de coordenadas local conhecido para o sistema de coordenadas EPSG:3857 (às vezes chamado de “Web Mercator”). Este é o sistema de coordenadas usado pela maioria dos mapas on-line, por exemplo o Google Maps ou o Mapbox. Para usar um desenho como entrada para o dwg2maptiles e produzir ladrilhos de mapa georreferenciados, o desenho precisa estar no sistema de coordenadas EPSG:3857.
No sistema de coordenadas EPSG:3857, todo o mapa do mundo cabe em um quadrado de 20037508.3427892m no nível de zoom 0. Se um desenho for convertido para este sistema de coordenadas, o desenho é transformado de tal forma que caiba nesse quadrado do mundo e que o desenho esteja localizado nas coordenadas mundiais projetadas corretas.
Por exemplo, se um desenho foi criado em EPSG:2056 (também LV95, o sistema de coordenadas local suíço), ele pode ser transformado em EPSG:3857 com o dwgmapconvert da seguinte forma:
dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxfComo as projeções cartográficas geralmente são não lineares, curvas e linhas mais longas precisam ser divididas em pequenos segmentos de linha que podem então ser projetados de forma não linear. Se o interruptor -segment-length for fornecido, o dwgmapconvert faz essa segmentação automaticamente, usando o comprimento de segmento dado. O comprimento de segmento é especificado em unidades de desenho do desenho original (aqui metros).
-crs-in é usado para especificar o sistema de coordenadas de entrada, aqui EPSG:2056.
-crs-out é usado para especificar o sistema de coordenadas de saída, que deve ser EPSG:3857 se a saída for usada posteriormente com o dwg2maptiles.
O dwgmapconvert oferece suporte a LV95 como entrada e WebMercator como saída.
Outros sistemas de coordenadas serão adicionados em versões futuras ou podem ser adicionados pelo usuário.
Para adicionar suporte a um novo sistema de coordenadas, devem ser fornecidas duas equações para converter as coordenadas do novo sistema de coordenadas para WGS84 (longitude/latitude, como as coordenadas GPS).
Novos sistemas de coordenadas podem ser adicionados a um arquivo de configuração JSON chamado CRS.json, localizado na pasta “scripts” da instalação do QCAD que é usada. Aqui está um exemplo de arquivo CRS.json que configura o sistema de coordenadas LV95. Para poder usar o LV95 como entrada para a ferramenta dwgmapconvert, precisamos fornecer a seção “toWgs84” com equações para a conversão das coordenadas x e y. Aqui, também usamos duas variáveis auxiliares, x_ e y_, que precisam ser inicializadas na equação x para serem acessíveis em ambas as equações.
Também poderíamos fornecer uma seção “fromWgs84” para permitir a conversão de outros sistemas de coordenadas para LV95. Ambas as seções são opcionais, dependendo do sentido de conversão que você deseja suportar.
{ "CRS" : [ { "id" : "EPSG:2056 CH1903+ / LV95", "toWgs84" : { "x": "x_ = (y-1200000)/1000000; y_ = (x-2600000)/1000000; (2.6779094 + 4.728982*y_ + 0.791484*y_*x_ + 0.1306*y_*x_*x_ - 0.0436*y_*y_*y_) * 100 / 3", "y": "(16.9023892 + 3.238272*x_ - 0.270978*y_*y_ - 0.002528*x_*x_ - 0.0447*y_*y_*x_ - 0.0140*x_*x_*x_) * 100 / 36" }, "aliases" : [ "LV95", "Swiss" ] } ]}Gerar os ladrilhos de mapa
Seção intitulada “Gerar os ladrilhos de mapa”Depois de converter o desenho para coordenadas EPSG:3857, podemos usar o dwg2maptiles para gerar os ladrilhos da camada de sobreposição no Leaflet:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxfObserve que precisamos passar o interruptor -web-mercator ao dwg2maptiles para informar que ele não deve executar um zoom automático, mas sim gerar uma sobreposição de mapa em coordenadas EPSG:3857 exatas conforme presentes no arquivo.
-skip-empty diz ao dwg2maptiles para não gerar ladrilhos que não contenham nenhuma parte do desenho. Sem esse interruptor, serão gerados 2^zoomLevel ladrilhos por nível de zoom. Isso seriam 4’194’304 ladrilhos para o nível de zoom 22. Como um desenho de sobreposição muito provavelmente cobre apenas uma parte muito pequena do mapa do mundo, esse interruptor deve sempre ser usado ao criar mapas de sobreposição.
-b transparent define o fundo como transparente, para que o mapa possa ser usado como sobreposição de um mapa do mundo existente (por exemplo, Google Map, Mapbox, etc.). Para controlar a cor em que as linhas pretas ou brancas são exibidas, o fundo pode ser definido como preto transparente ou branco transparente com -b "#00ffffff" (fundo branco transparente, linhas pretas) ou -b "#00000000" (fundo preto transparente, linhas brancas), respectivamente. Nesse caso, certifique-se de passar também o interruptor -c para forçar uma correção automática de cor.
O argumento -hq-postfix=@2x pode ser usado para gerar ladrilhos de alta resolução (512px) além dos ladrilhos normais de 256px. O valor “@2x” é recomendado e amplamente utilizado para ladrilhos de alta resolução, também no Leaflet. Com esse interruptor, para cada ladrilho de baixa resolução “N.png”, é criado um ladrilho de alta resolução “[email protected]”.
Usar múltiplos processos (e núcleos de CPU)
Seção intitulada “Usar múltiplos processos (e núcleos de CPU)”Gerar ladrilhos de mapa pode ser uma tarefa intensiva em CPU, dependendo dos níveis de zoom, da complexidade do desenho e de outras configurações.
Para gerar ladrilhos de mapa mais rápido, você pode dividir o trabalho entre vários núcleos de CPU disponíveis. Para esse recurso, o dwg2maptiles oferece o interruptor -s para gerar apenas uma fatia (slice) dos ladrilhos necessários. O interruptor -s espera dois parâmetros separados por vírgula: a fatia a gerar e o número total de fatias usadas. Por exemplo, -s 1,4 geraria a primeira de quatro fatias no total. Para gerar todos os ladrilhos do exemplo acima usando quatro núcleos de CPU, você poderia executar:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparent -o path/to/output/directory drawing_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É claro que você também poderia dividir as tarefas por níveis de zoom ou usar fatias apenas para os níveis de zoom mais altos e um único processo para todos os níveis de zoom mais baixos (mais baratos), etc.
Exemplo
Seção intitulada “Exemplo”Um exemplo interativo fornece duas camadas de sobreposição ao mapa do cantão suíço de Zurique: a área florestal protegida e os corredores de vida selvagem. Os dados originais estavam em coordenadas EPSG:2056 (LV95) e foram transformados em EPSG:3857 usando o dwgmapconvert.