Criando um pequeno serviço de mapeamento da web / mosaico de mapa


26

Estou procurando uma maneira fácil e em pequena escala de apresentar um ou mais shapefiles de polígonos on-line (em um site municipal sem nenhuma infraestrutura existente de servidor de mapas, para ser mais preciso). No momento, estou fazendo todo o trabalho com o QGIS, e eu preferiria manter todo o código aberto (não há orçamento sobrando para grandes investimentos em software).

A pesquisa deste tópico resultou em um número esmagador de abordagens possíveis e me deixou bastante confuso. O que eu estou procurando é

  • ser capaz de mostrar polígonos categorizados em um mapa temático (- se possível, seria bom obter pop-ups ou recuperar informações de atributos - mas isso é altamente opcional)
  • Eu preferiria fazer a maior parte do trabalho (estilo, etc.) no QGIS
  • OSM como mapa base ficaria perfeitamente bem

Até agora, os blocos de mapa personalizados em um mapa base do OSM se parecem com o que estou procurando (ou existe uma solução melhor)? Qual seria a melhor maneira de criar esses blocos?


2
Tem que ser uma solução baseada em varredura (Web tiles)? Seria bom para uma solução vetorial?
Mapperz

Não, não mesmo. Eu apenas imaginei que seria a maneira mais fácil (criar blocos, criar index.htm ou bloco de código para colar na página da web existente, copiar para o diretório do servidor, pronto). Eu trabalhei com o GMapCreator uma vez antes em um projeto particular e foi uma maneira muito rápida de fazer as coisas.
19411 ASnderka

Quantos polígonos você tem no shapefile? Se for abaixo de 1000, talvez o comentário do @ Mapperz sobre uma solução vetorial seja o caminho a seguir. A solução mais simples é usar a API do Google Maps para desenhar polígonos e criar janelas pop-up de informações - não é necessário criar e armazenar imagens lado a lado não interativas. As imagens lado a lado de um mapa são melhores para informações altamente densas, como imagens de satélite, estradas ou limites do setor censitário.
b_dev

Respostas:


13

Para uma maneira simples de fazer isso, começando com o QGIS, você pode usar o QGIS Mapserver, que pode servir mapas que você cria usando a interface QGIS normal. Como alternativa, você pode optar pelo GeoServer, que é baseado em Java e provavelmente mais fácil de instalar. Como os dois programas veiculam mapas usando padrões abertos, se você iniciar um e precisar mudar mais tarde, não há necessidade de alterar o cliente.

Depois de configurar um sistema para servir mapas WMS, você precisará de um front end do cliente. Eu recomendaria o OpenLayers , pois é bastante simples de começar e facilmente expansível. Ele lida com blocos WMS, WMST e OSM sem problemas.

Por fim, pode ser necessário mudar para blocos para as camadas WMS (digamos que você comece a receber mais de 50 a 100 solicitações por minuto em hardware razoável); então, você deve colocar um cache de blocos na frente do servidor de mapas. Se você usou o GeoServer, pode usar o GeoWebCache que está embutido ou o TileCache .


Meu problema é que estou trabalhando como consultor freelancer em uma administração municipal no momento. A equipe de TI local é bastante tímida e tenta manter todo tipo de material de código aberto "suspeito" de suas máquinas (lutei uma longa e longa batalha pelo QGIS). Portanto, eu realmente gostaria de evitar qualquer solução que precise ser instalada como um "software" no espaço da web do município.
SAnderka

Minha solução dos sonhos seria algo que eu possa preparar sozinho e apenas copiar para o espaço da web, inserir o código html / JS e concluir. Sejam dados rasterizados ou vetoriais, não contam realmente no final. De qualquer maneira, sou o único que entende a diferença técnica ... E todo mundo se importa é uma apresentação fácil e agradável de nossos dados para nossos cidadãos.
19611 SAnderka

11
você só precisa explicar a eles que o mapeamento da web não é algo que você pode fazer facilmente sem nenhum software. Claro que você pode jogar alguns blocos simples em um servidor da Web, mas ele não ficará bem em todas as escalas, é difícil de manter e difícil adicionar recursos quando o prefeito quer mais.
Ian Turton

Então, olhei para o Geoserver (como parte do pacote Open Geo Suite) e parece muito bom. Importei meu shapefile, estilizei-o e até consegui a visualização em execução no localhost. Mas como obtenho esses mapas on-line no meu espaço na web? Estou esquecendo de algo? Marcadores etc. obviamente não funcionarão, pois se referem ao meu disco rígido local. Eu trabalhei no meu caminho através de todos os tutoriais possíveis e como, mas esse tópico nunca parece ser discutido? Alguém poderia me apontar na direção certa?
SAnderka

você coloca o GeoServer no servidor da Web e copia o diretório de dados da sua máquina local para a máquina remota.
Ian Turton

8

ser capaz de mostrar polígonos categorizados em um mapa temático (- se possível, seria bom obter pop-ups ou recuperar informações de atributos - mas isso é altamente opcional)

Eu preferiria fazer a maior parte do trabalho (estilo, etc.) no QGIS

OSM como mapa base ficaria perfeitamente bem

Tudo isso pode ser feito no QGIS e no ogr2layersplugin. O fluxo de trabalho é simples:

  1. Estilize seus dados no QGIS. Use a simbologia antiga como tive problemas com o New Symbologyquando usar o ogr2layersplugin.

  2. Inicie o ogr2layersplug - in e defina as configurações dos openlayers (como tamanho do mapa, controles do mapa, mapa base, etc.). Isso criará um diretório que contém as index.htmlcamadas de dados e suas convertidas como geojsonarquivos.

  3. Faça o upload do diretório no servidor da web.

Observe que isso é apenas para um mapa da web simples. Para criar mapas base personalizados e outros recursos de mapeamento da web, confira as respostas de iant e Peter.


11
Um webmap simples significa que ainda é possível rodar o zoom, sim? Isso soa como algo que eu deveria procurar quando voltar ao meu escritório.
19611 SAnderka


6

Outra opção é o TileMill - ele suporta lado a lado, interação e cartografia em uma interface baseada na Web fácil de usar, incluindo definições de estilo em uma linguagem proto-CSS chamada cascadenik . Usando o TileMill, você pode gerar arquivos mbtiles que podem ser consumidos com algo como o TileStream . Dito isso, ainda existem alguns truques com a implantação das saídas mapeadas, mas isso lhe daria uma boa plataforma para gerar blocos de alta qualidade.


Assista ao vídeo de demonstração na primeira página, é muito impressionante!
joshdoe

6

Decidi fornecer algumas informações sobre como finalmente fui para o meu serviço de mapas lado a lado. JavaScript puro e GeoJSONs não foram uma solução, porque eu tenho que lidar com aproximadamente 40 mil polígonos e 33 mil pontos. Então eu fui para a telha. Ah, e como ainda não tenho acesso ao servidor raiz, não posso configurar o GeoServer ou algo semelhante (não seria financeiramente viável para um único cliente no momento)

Após algumas pesquisas e leituras, finalmente me estabeleci com o OpenLayers (depois de algumas apresentações com o GMaps). O grande livro de Eric Hazzard "OpenLayers 2.10" (Packt Publishing, 2011) realmente me ajudou muito, porque também abrange algumas dicas básicas de JavaScript e dicas de depuração.

Trabalhei com todos os meus dados vetoriais no QGIS, é claro, esse é definitivamente o caminho a seguir para um pequeno freelancer como eu (também conheço algumas coisas do ArcGIS na universidade, mas o QGIS oferece tudo o que eu sempre precisei até agora).

Nomear o mapa e criar as peças era um desafio maior. Primeiro, eu fui junto com o " GMapCreator " do CASA, mas colocar vários shapefiles em camadas provou ser tedioso (eu tenho que fornecer dados de pontos sobre polígonos e, em seguida, uma fronteira municipal envolvendo tudo). É absolutamente possível fazer isso no GMapsCreator (e eu fiz isso no estágio de demonstração), mas são necessários 3 ciclos completos de renderização (primeiro você cria peças, depois as peças existentes ficam "superexcitadas" com recursos posteriores - renderizando na ordem certa é importante!), e os menus de estilo são um pouco volumosos e confusos. Salvar seu mapa e editá-lo mais tarde também é um problema complicado.

O TileMill parecia muito promissor, especialmente o estilo CSS, então eu olhei para ele. Infelizmente, é apenas para Mac ou Linux, o que pode assustar algumas pessoas. Gostei muito do que vi, então montei uma partição Ubuntu no meu disco rígido, baixei-a e estilizei meus mapas. Às vezes, a documentação sobre a sintaxe de estilo é um pouco escassa, mas assistir ao vídeo demo (linkado no site principal) responde quase tudo. É possível fazer algumas coisas interessantes com estilos aninhados e / ou condicionais, e algum entendimento básico de CSS deve realmente levá-lo aonde você quer ir.

No final, o TileMill renderiza um belo arquivo * .mbtiles. Eu não acho que exista uma maneira de exibi-los diretamente no OpenLayers (pelo menos não consegui encontrar um?), Então estava na hora de usar outra ferramenta: mbutil . Essa ferramenta "descompacta" o arquivo mbtiles em uma estrutura de pastas comum que contém os pngs lado a lado dos meus dados nos níveis de zoom selecionados.

Por fim, carreguei todos esses arquivos no meu servidor FTP, fiz algumas leituras pesadas no OL para atualizar meu webmap (você adiciona os blocos criados como uma camada TMS, mas acho que o URL da fonte e o nome da camada corretos levaram algum tempo e pesquisando no Google) e depois passamos algumas horas mexendo nos problemas básicos de html / CSS. Eu queria um mapa de largura / altura de 100% com uma legenda flutuante, seguindo as orientações de identidade "corporativas" dos meus clientes (é um município, como mencionado).

Ah, e até agora eu uso o Google Maps como camadas de base, mas isso pode ser substituído em breve por algumas imagens aéreas personalizadas veiculadas via WMS (não fornecidas por mim, mas pela pesquisa e administração de dados geográficos do estado).

Espero não ter esquecido nada importante, mas, se o fiz, sinta-se à vontade para perguntar! Vou verificar esta discussão ocasionalmente.


Agora Tilemill também está disponível para Windows. Há também um tópico relativamente recente na lista de discussão Openlayers Users sobre o uso de mbtiles como fonte de dados (ainda não tentei).
27512 Marte

Ah, obrigado, bom saber. Definitivamente tem que tentar isso, tem sido um pouco chato alternar entre win7 e ubuntu o tempo todo.
SAnderka

3

Se você tiver menos de 1.000 polígonos, considere o comentário do @ Mapperz em uma solução vetorial - não é necessário criar e armazenar imagens lado a lado não interativas se você tiver apenas alguns polígonos.

As imagens lado a lado são ideais para informações altamente densas, como imagens de satélite, estradas ou 50.000 polígonos do setor censitário.

A solução mais simples para um pequeno número de polígonos é converter o shapefile em um KML e enviá-lo para o Google My Maps.

Se você codificar em Javascript, a solução mais interativa é a API do Google Maps (ou OpenLayers) para desenhar polígonos e criar janelas pop-up de informações. Você pode começar convertendo os polígonos do shapefile, usando a biblioteca GDAL, em um arquivo geoJSON (uma maneira Javascript de armazenar informações geográficas).

Ou, se você seguisse a rota dos blocos, poderia armazenar blocos na Amazônia ou na nuvem do Google sem problemas internos.

Esta entrada do blog de Mapeamento Temático possui um bom resumo das vantagens da abordagem de vetor sobre a abordagem de blocos que você está considerando.

Boa sorte!


Descobri que cerca de 500 pontos tratados como vetor em uma única visualização tendem a desacelerar as coisas para um rastreamento. Nós colocamos tudo sobre 500 pontos.
Michalis Avraam

1

Eu sinto por você companheiro, como eu tenho trabalhado lentamente o meu caminho para a mesma conclusão. Tendo aprendido QGIS, tentei quantamnik e mapnik. Mas enquanto ele portará o estilo do qgis, é uma viagem de ida e os sistemas de estilo não são 1 para 1; portanto, você terá que aprender o estilo do mapnik de qualquer maneira. Suponho que o mesmo se aplica à função de exportação do qgis mapserver. Não parece ser uma "maneira fácil" de aprimorar o servidor de mapas, basta enxertá-lo e permitir muito tempo.

Mapnik, geoserver, mapserver, parece que existem devotos de cada um, mas o mapserver parece ser o caminho do meio.

Dito isto, há um atalho que encontrei e o qgis tem uma opção de linha de comando para rasterizar um mapa do qgis com a resolução e os limites de sua escolha e cria um arquivo de mundo. Com isso, você pode usar o maptiler ou o gdal2tiles para colocar uma camada de cada vez. Obviamente, não seria bom para 20 níveis de zoom, nem sei qual é o limite máximo de tamanho png.


2
O QGIS MapServer é diferente do MapServer.
Ian Turton

2
Devido a esse potencial de confusão, ele deve ser chamado de QGIS Server.
underdark
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.