Existe uma solução FOSS para análise de legendas em um ambiente de mapeamento da web?


14

Nossos requisitos de mapeamento da web são bastante padrão - algumas consultas básicas e a capacidade de imprimir o mapa resultante (ou salvar a imagem). Normalmente, usamos produtos ESRI no passado (agora estamos usando o GeoCortex), mas ainda não conseguimos resolver o problema de como analisar as informações da legenda para corresponder ao que realmente está sendo mostrado no mapa. Por exemplo, se houver quatro polígonos aparecendo no mapa, deve haver apenas quatro itens de legenda para os polígonos. Existe uma solução de código aberto para esse problema?

EDIT : Vamos ver se posso esclarecer isso mais. Atualmente, temos uma camada de geologia com mais de 33.000 polígonos. A legenda dessa camada é uma imagem única e contém várias centenas de itens de legenda (ou seja, é a legenda de toda a camada geológica, armazenada em JPEG / PNG).

Normalmente, um usuário aumenta o zoom em uma área (como uma única folha de mapa NTS, ou até menor) e, portanto, um subconjunto de polígonos de geologia será mostrado na tela. Eles salvarão o mapa como um documento impresso (PDF ou imagem), gerado pelo GeoCortex / ArcGIS Server. O documento impresso conterá um cabeçalho, uma imagem do mapa e uma legenda. No entanto, a legenda para a camada geológica será a legenda para toda a camada geológica, não o que é realmente mostrado no mapa (ou seja, um subconjunto muito menor).

Portanto, estou procurando ver se existe uma solução FOSS que permita recortar ou gerar dinamicamente um subconjunto da lenda da geologia que reflete os itens reais na tela / no mapa, para acompanhar o documento impresso . Eu espero que isso esclareça as coisas; Peço desculpas se não!


1
Oi ollyoop- Estou tendo dificuldades para visualizar o resultado desejado. Você pode incluir um exemplo da lenda ruim e um exemplo de uma boa lenda? Eu acho que isso pode ajudar a mim ou a outros a dar uma resposta. Obrigado--
andytilia

esse recurso foi incluído no servidor Arcgis 10.1, eu o vi durante uma apresentação do ESRI.
Geogeek

Hmmm, bem, vamos ver como isso realmente funciona. Enquanto isso, existem soluções FOSS?
Ollyoop

1
Baseado em FOSS ou ESRI, parece que você precisará de um código personalizado.
Ragi Yaser Burhum

Certamente, o Latitude Geographics pode fazer isso. Você já conversou com eles sobre isso (se ele já está ou não no Geocortex Essentials ou se planeja implementá-lo)?
Chad Cooper #

Respostas:


3

Definitivamente, é possível fazer o que você deseja, dependendo de certas condições. Dê uma olhada neste Flex App que eu desenvolvi há alguns anos: http://india-wris.nrsc.gov.in/LULCApp.html .

A legenda e as estatísticas mudam de acordo com os dados visíveis na extensão atual. O algoritmo requer que cada classe tenha uma cor distinta. O aplicativo Flex conhece a classe e sua cor. A cada mudança de extensão, ele converte a extensão atual do mapa em um bitmap e descobre as cores nele. Usando isso, você pode descobrir quais cores ou classes estão visíveis no momento. Com base nessas informações, a legenda é criada dinamicamente.

Eu havia usado o Flex naquele momento, mas isso também é possível usando o Canvas no HTML5. Ou você pode usar qualquer código do lado do servidor para fazer a mesma coisa com a imagem do mapa e obter a legenda criada dinamicamente.


É exatamente isso! Ótimo ver um exemplo na prática. Muito apreciado!!!
ollyoop

5

AFAIK, no FOSS4G ou ESRI, você precisará escrever um código personalizado para gerar essa camada.

Não é que difícil, mas vai demorar mais do que algumas linhas de código.

Para o ArcMap, isso é feito usando um elemento personalizado . O site de ajuda da ESRI está repleto de exemplos antigos e novos .

No passado, consegui algo semelhante ao que você descreveu usando os Elementos de quadro do Pagelayout .

Se você nunca fez ArcObjects (mas já programou), o código do desenho pode ficar um pouco complicado, mas geralmente é preciso fazer alguém chegar a esse "aha!" momento.

O algoritmo é simples:

  • (1) Obtenha o objeto Map do PageLayout que você deseja usar como referência para gerar a legenda ... Talvez seja necessário lidar com vários quadros para alcançar o mapa desejado, porque um Pagelayout pode conter vários objetos Map com diferentes extensões, o que é um pouco incomum se você não fez nenhuma programação personalizada do ArcMap Pagelayout (pense nos pequenos mapas inseridos que você pode ter).

  • (2) Pegue a extensão visível do ActiveView do mapa que você deseja.

  • (3) Use isso como geometria do filtro de consulta para fazer um loop e pesquisar por todas as camadas no mapa.

  • (4) Se a camada retornar algum registro, você deverá desenhá-lo conforme mostrado nos exemplos que eu lhe dei anteriormente.

Desculpe, não posso oferecer uma solução mais fácil, mas pelo menos dessa maneira você poderá fazer com que ela pareça da maneira que você quer - apenas codificação necessária.

Atualizar:

Como você queria fazer isso no contexto de um aplicativo da Web, verifiquei a documentação e existem várias maneiras de fazer isso usando um algoritmo semelhante.

Uma delas é através de uma extensão de objeto do ArcGIS Server . Você executaria todas as etapas, exceto (1) (não é necessário se preocupar com o Pagelayout neste contexto). Exponha o resultado usando REST.

A partir daqui, você tem várias opções (com base em se deseja usar o Flex ou Javascript), mas a idéia é a mesma - na atualização da página, chame o serviço web REST que você criou e desenhe a legenda.

A vantagem dessa abordagem, em oposição a outras sugeridas, é que você pode usar qualquer simbologia com seus recursos (e não se limita a cores distintas para a simbologia do recurso). Você pode usar seu idioma da web favorito para o código do lado do cliente. Os símbolos que você gera para a legenda podem ser gerados automaticamente a partir do mapa.

A desvantagem é que você precisará escrever uma extensão de objeto do servidor! Felizmente, há uma amostra de ESRI que faz 75% do que você já precisa e deve fornecer uma idéia clara de como continuar com os comentários que fiz acima.

Atualização 2: No que diz respeito a uma solução FOSS4G para isso, a mesma abordagem também funcionaria com qualquer um dos servidores FOSS, embora a API seja um pouco diferente para cada um.


1
Muito obrigado pela resposta! Existe uma ferramenta chamada Legend Limiter que já faz isso no ambiente ArcGIS. O que estou procurando fazer é portar essa capacidade para o mundo do mapeamento da web.
ollyoop

@ollyoop Pelo menos até a 9.3, eu sei que essa mesma abordagem teria funcionado completamente bem para o ArcGIS Server. Eu sei que houve mudanças significativas na arquitetura de renderização do servidor desde a 9.3, e reconhecidamente não a acompanhei. Eu ficaria surpreso se os elementos personalizados fossem retirados da versão 10.1.
Ragi Yaser Burhum

O @ollyoop adicionou uma abordagem que funcionaria com o ArcGIS Server
Ragi Yaser Burhum

3

Quando você exporta para um PDF com o Geocortex Essentials, a legenda é gerada por um sub-relatório no modelo de impressão. Esse sub-relatório recebe todas as camadas visíveis que foram usadas para criar a imagem do mapa e todas as amostras de legenda produzidas pelo ArcGIS Server. Ele não emite consultas espaciais para determinar se alguma camada da legenda é realmente desenhada na extensão da área impressa.

Portanto, se você desejar alterar o comportamento da legenda, poderá personalizar o sub-relatório de legenda ou usar uma imagem em vez de um sub-relatório para inserir uma legenda no modelo de impressão. Se você já estiver gerando uma imagem de legenda de alguma forma para uso no visualizador, poderá reutilizar esse serviço no mecanismo de impressão.

A legenda já contém algum código embutido incorporado que alterna a formatação do texto da legenda com base em se a amostra é para uma camada ou para uma classe na camada. Você pode ver o código embutido ao alternar para a guia "Script" no designer de relatório.

(Trabalho na Latitude Geographics)


1

Sobre o "mapeamento da web" com a "solução FOSS" completa ... Considerações:

  • A "solução FOSS" deve ser "popular" (ter uma comunidade grande e organizada) para ser segura, estável etc.
  • Um conceito-chave no software livre e no SIG é a padronização : as melhores soluções adotam padrões, como os OGC .
  • Hoje, as populares "soluções da web" são OpenLayers, Mapserver, GeoServer, PostGIS, etc. Todas elas possuem um núcleo compatível com OGC. A solução "GeoCortex / ArcGIS Server" não é de software livre, mas, talvez, seja compatível com OGC.

E consideração técnica: você está usando "coberturas" (?), Portanto, um bom padrão OGC para recuperar suas informações espaciais é o WMS .


Uma solução simples compatível com o OGC para o seu problema é usar os serviços WMS GetCapabilities e GetLegendGraphic , que retornam uma descrição de legenda padrão para um arquivo XML e a imagem com legendas.

NOTA: quando você pensa em alguma solução GIS / FOSS, pode pensar primeiro nos padrões, depois o problema é reduzido a um "problema conhecido de peças LEGO" e as peças vêm de qualquer fornecedor.

O ArcGIS 10+ possui GetLegendGraphic , mas verifique se você pode especificar o BBOX para mostrar apenas um subconjunto de legenda.


Se você deseja criar um layout de mapa com legenda , existem outras partes desta "solução FOSS LEGO":

Qualquer servidor de mapa FOSS, como o MapServer (e acho que também as soluções ESRI), pode oferecer uma imagem JPEG como uma solicitação de mapa WMS (sem bloco ) - consulte o serviço GetMap do WMS .

PS: não é um padrão, mas talvez o servidor possa ser configurado para oferecer mapa com legenda , por ferramentas de modelo, como o MapServer.

Para criar um layout de "mapa com legenda", você pode gerar um HTML (ou "arquivo PDF em tempo real") com Javascript, PHP ou outro idioma que faça as solicitações de serviço da Web (REST) para mapa e legenda.

Prefiro gerar PDF a partir de HTML: você pode usar o wkHtmlToPdf , uma solução FOSS para conversões de HTML para PDF. Para produzir layouts mais pobres, com "layout JPEG on fly", você pode usar um kit de ferramentas FOSS padrão, como imagemagick , no servidor.

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.