domingo, 18 de outubro de 2015

Tutorial OpenLayers 3 - Aplicando filtros em uma camada WMS com MapServer

Olá galera,

O vídeo de hoje é atendendo o pedido de +Helder soares de menezes - seguidor do nosso canal no YouTube. A solicitação é para aplicar filtros digitados em um formulário em uma camada de mapa. Para exemplificar vou utilizar o MapServer com uma camada WMS.

Os códigos utilizados podem ser baixados através do https://github.com/larsurilch/ol3

Um grande abraço a todos e até a próxima.

25 comentários:

  1. Bom dia

    Desenvolvo atualmente um site em openlayers2, com funcionalidades prontas https://egov1.santos.sp.gov.br/sigsantosweb20/sigsantoswebsd/
    Estou migrando para o open layers 3, ja consegui juntar o mapa do open street map com meus mapas em geoserver wms. mas nao consigo reprojetar para ficarem "exatos". teria alguma dica ou exempo ? meus mapas estao em sad69 e sirgas 2000

    ResponderExcluir
    Respostas
    1. Olá Paulo,

      Tem os próprios exemplos no site do OL3. Dá uma olhada no seguinte link: http://openlayers.org/en/v3.10.1/examples/wms-custom-proj.html

      Abraço

      Excluir
  2. Então Benicio, mas é justamente isso, já entrei no site do espg.io, já verifiquei o código que seria para o sirgas 2000, mas não consigo implementar essa solução, falta documentação para testar, para eu terminar a migração falta apenas esse detalhe

    Obrigado

    ResponderExcluir
  3. Olá Pedro,

    É bem provável que essa versão nova do OL não implemente o SIRGAS 2000. Nesse caso como na versão 2 deve-se o Proj4js. Olhando na API do OL3 achei exatamante falando a respeito disso. http://openlayers.org/en/v3.1.0/apidoc/ol.proj.html

    Abraço

    ResponderExcluir
  4. Boa tarde

    Adicionei o 31983.js, mudei as coordenadas e nada, está jogando todos os meus WMS para perto da inglaterra, rsss, complicado não ter suporte, não dá pra utilizar dessa maneira, alguém já fez algo parecido nessa versão do Open Layers será ?

    Obrigado

    ResponderExcluir
    Respostas
    1. Olá Paulo,

      Com certeza deve ser algum detalhe. Com relação ao suporte se realmente for bug, eu costumo colocar no GitHub. Tem algumas coisas abertas com relação a projection no link https://github.com/openlayers/ol3/issues?utf8=%E2%9C%93&q=projection

      Abraço

      Excluir
  5. Olá Benício,
    Vim aqui em uma das suas postagens qualquer pois estou com um problema numa das minhas aplicações com OpenLayers.
    Sei que não se trata especificamente sobre o tema deste video, mas envio por aqui o link do meu problema, que postei no StakExchange.
    Caso o senhor, por gentileza, puder me dar uma luz, eu ficaria muito grata.
    Att,

    https://gis.stackexchange.com/questions/270356/how-do-i-add-a-captionlegend-inside-a-button-when-turning-on-off-a-layer

    ResponderExcluir
    Respostas
    1. Olá Lilian,

      Até onde compreendi vc quer colocar a legenda da dúvida em cima do mapa a ser visualizado correto?! Se for isso, vc já utiliza uma div com o id=map. Eu criaria mais uma div com o id=legend e usando CSS posicionaria ela em cima do mapa.

      Abraço

      Excluir
    2. Na verdade Sr.Benício o que eu desejo é fazer aparecer/desaparecer uma legenda através de botão.
      A legenda em questão que deve aparecer é a da layer que estiver "ligada/desligada" no meu webgis.
      Tentei um teste simples para isso, colocando uma tag "img", fazendo a chamada do OPL3 com "GetLegendGraphic" dentro de um botão.
      Entretanto, mesmo após criar uma função pro "button", ele não me faz aparecer a legenda.

      Fiz o que o senhor sugeriu também.

      Excluir
    3. Olá Lilian,
      Terminei de subir um vídeo no canal https://www.youtube.com/watch?v=oWKCO-_xjQA e seu respectivo código no GitHub.
      Espero que ajude a resolver seu problema.
      Abraço

      Excluir
    4. Olá Benício, como vai?

      Bom, aproveito esse espaço pra pedir uma nova ajuda, em uma aplicação completamente diferente da que eu comentei aqui no blog.

      Estou precisando criar um microserviço de TMS. Tenho uma imagem raster e gostaria de fazê-la aparecer numa visualização LeaFlet.
      Usei a biblioteca Rasterio para gerar um TMS, e consegui, mas tudo local.
      Criei um servidor em Flask, e agora gostaria de "subir" essa TMS dinamicamente.

      Já teve experiência com isto?
      Poderia me auxiliar?

      Excluir
    5. Olá Lilian,
      Tudo tranquilo. Eu conheço um pouco de Leaflet mas não conheço e nunca trabalhei com Flask. :-(
      Acho que dessa vez vou ficar te devendo.
      Abraço

      Excluir
  6. Oi, professor. Acompanho suas aulas com o Openlayers, pois estou trabalhando numa aplicação que requer o uso dessa ferramenta.

    Este video da postagem (filtros numa camada wms) me ajudou bastante no desenvolvimento do meu trabalho.

    Enfim, gostaria de pedir a sua ajuda em relação a como aplicar animações numa camada WMS. Peguei o exemplo do site do Openlayers, mas só consegui fazer funcionar no mapa com a camada padrão,igual como tá no site, quando tentei implementar no meu mapa com wms as animações não funcionaram.

    Gostaria de aplicar as funções, como no exemplo do site, mais especificamente a 'pan to london', fly to bern e bounce to istanbul.

    https://openlayers.org/en/latest/examples/animation.html

    Valeu. Obrigado.

    ResponderExcluir
    Respostas
    1. Olá Phelipe,
      Na teoria era para funcionar sem problemas já que a animação do view e não da camada que está sendo exibida. Agora se você estiver trabalhando com camadas em projeções diferentes aí pode dar problema. Ao tentar executar alguma animação é exibido algum erro?!
      Abraço

      Excluir
    2. Ôpa, Benicio. Obrigado por responder.
      Pois, é ainda não consegui resolver esse problema. Não te respondi antes porque estava trabalhando com outra coisa.

      Agora voltei ao Openlayers. Sobre a sua pergunta, tenho a variável view instanciada como global, mas a animação não ocorre. Já a projeção da minha camada é 4326.

      A animação, por enquanto, não é o mais importante na minha aplicação. Queria aproveitar que você perguntou se não estava aparecendo alguma mensagem. Tô tentando implementar o exemplo "WMS GetFeature Info (Image Layer)". Quando clico em um ponto do meu mapa ele exibe uma mensagem de erro.

      A mensagem é essa:

      msWMSFeatureInfo(): WMS server error. Requested layer(s) are not queryable.

      Sabe o que pode ser?

      Obrigado.

      Excluir
    3. Olá Phelipe,
      Para o GetFeature Info ser possível, você tem que habilitar no servidor de mapas. Somente após isso, será possível a extração de dados.
      Abraço

      Excluir
    4. Benicio, já estava habilitado no meu .MAP (dentro de METADATA) da seguinte maneira...

      "wms_enable_request" "*".

      Também tentei:

      "wms_enable_request" "GetMap GetFeatureInfo"

      Porém, nenhum dos dois dá certo. O erro é esse: 'msWMSFeatureInfo(): WMS server error. Requested layer(s) are not queryable.'

      Obrigado pela ajuda.

      Excluir
    5. Olá Phelipe,
      O parâmetro do METADATA é esse mesmo.
      Tem algum TEMPLATE definido?!
      Abraço

      Excluir
    6. Olá Bencio. Tem sim um template, nesse template (HTML) é onde aparece a exceção.

      Essa é a descrição completa do erro, que é exibida no template, quando clico em um ponto do mapa: msWMSFeatureInfo(): WMS server error. Requested layer(s) are not queryable. msValidateParameter(): Regular expression error. Parameter pattern validation failed. msEvalRegex(): Regular expression error. String failed expression test.

      Excluir
    7. Olá Phelipe,
      Nunca vi esse erro e nunca tive problemas com GetFeatureInfo. Também não sei como está configurado seu .map

      Excluir
    8. Benicio, você poderia me arrumar, por favor, um .MAP que utilize o GetFeatureInfo que esteja funcionando pra eu ter como base?

      meu email é phelipeguedes89@gmail.com ou phelipe.guedes@hotmail.com

      obrigado.

      Excluir
    9. Olá Phelipe,

      Tentar colocar por aqui caso alguém mais precise desse tipo de informação. Vou colocar as partes do .MAP que precisam ter.

      WEB
      TEMPLATE ../config/template.html
      METADATA
      "tile_map_edge_buffer" "20"
      "labelcache_map_edge_buffer" "-20"
      "wms_title" "WMS"
      "wms_onlineresource" ""
      "wms_srs" "EPSG:4326 EPSG:3857"
      "ows_enable_request" "*"
      "wms_abstract" "Serviço WMS"

      "wms_feature_info_mime_type" "text/html"
      "wms_encoding" "UTF-8"
      "ows_sld_enabled" "true"
      END
      END

      Excluir
    10. Já dentro da minha LAYER eu tenho o seguinte.

      LAYER
      TEMPLATE "../config/template.html"
      NAME "generated_layer"
      POSTLABELCACHE FALSE
      PROCESSING "LABEL_NO_CLIP=ON"
      LABELCACHE ON
      METADATA
      "wms_title" "generated_layer"
      "gml_include_items" "all"
      "gml_featureid" "__id__"
      "ows_featureid" "__id__"
      "wfs_featureid" "__id__"
      "wfs_srs" "EPSG:4326 EPSG:3857"
      "ows_srs" "EPSG:4326 EPSG:3857"
      "wfs_getfeature_formatlist" "OGRKML"
      END
      TYPE POLYGON
      .
      .
      .
      END

      Excluir
    11. Benicio, não deu pra eu testar o meu .map de acordo com o seu exemplo, trabalhei em outras coisas, não utilizei o openlayers.

      Assim que possível, farei o teste.

      Muito obrigado mesmo pela ajuda e compreensão.

      Excluir
  7. Olá, Benicio.
    Cara, desculpa por não ter te dado um retorno logo. Tive que dar uma pausa no Openlayers e fazer outras aplicações.

    Infelizmente,não consegui prosseguir com o trabalho. Parei no "GetFeatureInfo", justamente no erro que mencionei anteriormente. Ao clicar no ponto, o erro era exibido. Modifiquei de acordo com o seu código, porém não tive sucesso.

    Mais uma vez, meu muito obrigado pela ajuda.

    Continue com esse trabalho.

    Valeu.

    ResponderExcluir