Renderizando imagens no OpenLayers?

11

Minha organização possui um aplicativo da web para exibir dados climáticos globais e regionais e estamos considerando melhorias para eles. Nossa idéia principal é criar um aplicativo baseado em OpenLayers para exibir rasters climáticos em camadas básicas, como OSM ou Google Maps. O mapa também pode incluir algumas outras camadas vetoriais de aplicativos e uma barra de cores ou outros recursos de legenda que descrevem os dados. Perto do que sei, tudo isso é possível com o OpenLayers.

Um requisito para o projeto, no entanto, é poder exportar ( idealmente do aplicativo da web) mapas de qualidade (mais ou menos). Um caso de uso típico seria algo como isto:

  1. Um usuário, usando a camada base como guia, navega para sua área de interesse
  2. O usuário seleciona um parâmetro climático (por exemplo, temperatura média para os anos 2040) ou um conjunto de parâmetros
  3. O usuário pressiona o botão "exportar" e baixa um mapa de boa qualidade, que inclui todos os elementos descritos no primeiro parágrafo.

Não consegui encontrar nada no OpenLayers sobre renderização para uma imagem. Alguém sabe se isso é possível? E se não, que outras abordagens de renderização poderíamos adotar? Suponho que precisaríamos passar todos os parâmetros do mapa (bbox, projeção, camadas incluídas etc.) para algum mecanismo de renderização externo; que mecanismos de renderização de código aberto existem por aí?

Hiebert
fonte
Eu implementei exportar como png / pdf e imprimir mapas de openlayers aqui em www.mapsdata.co. você pode se registrar e conferir.
precisa saber é

Respostas:

12

As principais maneiras de exibir mapas de impressão bonitos dos openlayers que eu conheço são:

-Geoserver com Geoext

-Mapa com Geoext

Ambas as soluções contam com uma parte java (por exemplo, http://geoserver.org/display/GEOS/Printing+in+GeoServer ou http://www.mapfish.org/doc/print/ )

-Openlayers autônomos (consulte o documento oficial http://trac.openlayers.org/wiki/Printing )

Mais recentemente, uma técnica parece renderizar imagem com o PhantomJS (um software que simula o navegador na linha de comando) http://acuriousanimal.com/blog/2012/09/17/creating-static-maps-in-openlayers-using-phantomjs/

Algumas bibliotecas recentes usam a capacidade de renderização do Canvas do navegador para "capturar" imagens como este exemplo do OpenLayers 3 ou este folheto

ThomasG77
fonte
2

Para obter "qualidade de publicação", você deseja 300 dpi, portanto, usar os mapas que você passa para abrir camadas para renderização de tela provavelmente não é um iniciador.

A guia de exportação do OpenStreetMap usa o OpenLayers para selecionar o que você deseja exportar, mas o renderiza com um processo de servidor de back-end separado (na verdade, uma escolha de várias). Esta é provavelmente a abordagem que você terá que adotar. É improvável que você possa usar o Google Maps para isso.

rjmunro
fonte
Bem, "qualidade da publicação" provavelmente significaria svg ou algum outro formato vetorial. E quando eu coloco nesses termos, me faz pensar que, sim, provavelmente quereremos usar o Mapnik ou algo assim para renderizar um mapa base a partir do arquivo planet.osm. Em seguida, poderíamos usar alguma biblioteca de imagens para sobrepor os outros elementos (varredura climática, elementos de legenda, atributos). Você está certo de que o Gmaps provavelmente está fora do exportador (por várias razões técnicas e não técnicas). De qualquer forma, obrigado por todas as respostas.
Hiebert 10/09/10