Opções para exibir rasters PostGIS no OpenLayers

12

Essa pergunta é semelhante a uma pergunta anterior sobre a exibição de dados vetoriais em um mapa da web. Desejo ter uma interface da Web básica que use OpenLayers e possa exibir dados rasterizados atualmente no PostGIS, usando um mapa base como o google. Instalei o PostGIS2.0 com a biblioteca raster e veja na documentação que existem várias opções para gerar dados, como JPEG, GeoTIFF e PNG. É um formato recomendado para uso?

Para exibir dados vetoriais, atualmente estou usando javascript para enviar coordenadas do navegador do usuário para o meu servidor e, em seguida, executando uma consulta usando PHP / SQL no PostGIS. Os resultados são retornados como GeoJSON, que podem ser sobrepostos no mapa base. Gostaria de saber se uma abordagem semelhante poderia ser aplicada usando rasters, mas não sei qual é o melhor formato raster ou se existem outras restrições que devo considerar.

Eu já vi muitas referências ao GeoServer, mas não tenho certeza se é necessário para este projeto (não tenho certeza de quando o GeoServer deve ou não ser usado).

djq
fonte

Respostas:

13

Rasters são imagens ; portanto, o melhor formato será um formato de imagem (png / jpg / etc). Geojson é um bom formato para vetores . Você nunca verá, digamos, sua foto do perfil do Facebook ser transportada de volta como pura json. Obviamente, retornar um URL a uma imagem como json é muito, muito diferente :)

Quanto ao jpeg vs png ou qualquer outra discussão sobre o formato de imagem, há muitas opiniões diferentes sobre isso . O que se resume é que alguns formatos de imagem são sem perdas, enquanto outros são com perdas . Sua decisão depende do que você fará com os dados. Para análise, você provavelmente não tolera perdas, mas para exibir coisas na web, você faria.

O PostGIS 2.0 pode gerar imagens? Certo. Veja a seção Saída de varredura.

isso é uma boa ideia? Realmente realmente depende do que você está fazendo. Às vezes, a geração de imagens pode levar um tempo realmente muito longo, e você deseja armazená-las em cache para evitar pagar o preço de gerá-las sempre que solicitá-las em um ambiente da Web. O único "armazenamento em cache" que você pode fazer no lado do PostGIS é salvar os resultados em uma tabela diferente e, em seguida, consultar a tabela quando necessário. O Geoserver possui uma infraestrutura inteira ( GeoWebCache ) para fazer isso.

Você precisa do GeoServer, provavelmente não - mas isso facilita muito a vida quando você tem esse middleware que expõe todos os seus dados usando serviços da Web OGC , faz cache , estiliza vetores e rasters um monte de outras coisas .

Ragi Yaser Burhum
fonte
Entendo como gerar uma imagem usando o PostGIS - o que estou tentando entender é a melhor maneira de carregá-la no Openlayers. Por exemplo, se eu usar ST_AsPNG () - ainda precisarei identificar as coordenadas superior e inferior onde esta imagem está posicionada. Eu pensei que poderia haver uma maneira elegante de retornar uma imagem independente que eu pudesse carregar diretamente em openlayers (além de usar um servidor geográfico).
DJQ
Sim, você pode carregá-lo diretamente para os openlayers do st_aspng, mas isso exigirá trabalho extra. Você deve acompanhar a bbox e especificá-la quando carregá-la dev.openlayers.org/apidocs/files/OpenLayers/Layer/Image-js.html Confie em mim, é a rota mais longa. É melhor deixar o geoserver ou o mapserver fazer isso. Eles devolvem o WMS / WMTS e você usa duas linhas de código para adicioná-lo aos openlayers.
Ragi Yaser Burhum 12/10
4

O Mapserver tem suporte para rasters postgis e as instruções para uma configuração básica são fornecidas aqui (item 9.9).

No seu caso, você configuraria o Mapserver para funcionar como um servidor WMS, para que ele retorne os rasters Postgis como camadas normais do WMS. É quase trivial adicionar as camadas ao seu mapa OpenLayers usando um objeto de camada WMS .

Esse tipo de solução é provavelmente a melhor opção, pois é baseado no software OpenSource, é uma pilha comprovada e não requer um middleware abrangente. Todas as necessidades do servidor de mapas são um servidor da web (o apache que você provavelmente já está usando para php está ok) que pode executar scripts cgi. Se o desempenho não for um problema crítico, evite usar um cache (lado a lado) e peça ao servidor de mapas renderizar as camadas sempre que necessário.

Se você deseja armazenar em cache os blocos para minimizar a carga do servidor e melhorar os tempos de resposta, considere usar mapcache ou tilecache . O Mapcache é um projeto irmão mais novo do Mapserver, mas deve superar todos os outros caches, pois é executado como um módulo apache.

Para usuários do Ubuntu, a maneira mais fácil de instalar as dependências do Mapserver é adicionar o PPA GIS do Ubuntu ao seu sistema.

unicoletti
fonte
O Mapserver é definitivamente uma ótima alternativa do GeoServer (eu o uso para outros projetos). Geralmente, escolho o geoserver para meus clientes porque ele possui uma interface fácil de usar. No entanto, eu queria ressaltar que servir caches de tile está servindo conteúdo estático, e qualquer solução baseada em nginx (ou qualquer outro servidor sem bloqueio) seria muito mais rápida que qualquer solução apache - no isolamento por processo ou no modo encadeado.
Ragi Yaser Burhum 10/10
Obrigado @unicoletti. Posso usar o Mapserver se eu quiser gerar rasters com base na consulta dos usuários? Por exemplo, se eu permitir que os usuários especifiquem qualquer área (dentro de um determinado limite), isso permitirá que eu faça uma consulta espacial dessa área?
DJQ
O @celenius Mapserver e o GeoServer permitirão que você faça isso.
Ragi Yaser Burhum 10/10
1
@RagiYaserBurhum Comparo o mapcache com outros caches. Os blocos estáticos não estão falando estritamente de um cache.
Unicoletti
0

Tudo depende. Tamanho da imagem, armazenamento em cache, bibliotecas disponíveis (alguns drivers jp2k proprietários, por exemplo).

Aqui está um link para um pdf incrível , Geoserver em esteróides. Isso o guiará pelos vários formatos, prós e contras e algumas configurações básicas.

Jay Laura
fonte