Como posso mostrar apenas algumas classes de uma camada no UMN-mapserver?

9

Eu visualizo uma camada de forma no servidor de mapas. Agora, quero fazer alguns pedidos apenas para algumas classes dessa camada. Quero, por exemplo, um pedido apenas para as classes de água e, posteriormente, apenas para as classes de madeira. Posso perceber isso com o mapserver?

Mnementh
fonte

Respostas:

7

Aqui está outra maneira de fazer isso. Dessa forma, envolve o uso de uma camada com expressões em cada classe. É um pouco mais "caro" fazê-lo dessa maneira, pois envolve expressões lógicas, mas você nunca notará a diferença, a menos que atinja situações realmente de alta carga.

Cada classe tem uma expressão em duas partes. Ambas as partes da expressão precisam ser verdadeiras para que os recursos sejam desenhados. A primeira parte da expressão seleciona os recursos que devem se enquadrar nessa classe com base em um atributo no seu shapefile. A segunda parte da expressão avalia o valor de uma variável transmitida pelo URL. Não importa qual o nome da variável no seu URL (não use palavras reservadas como 'camada'), basta corresponder ao nome da variável na sua expressão.

Aqui estão algumas camadas de amostra:

LAYER
  NAME "watersheds"
  STATUS DEFAULT
  DATA 'majclip'
  TYPE POLYGON
    CLASS
       NAME "water"
       EXPRESSION ([MAJOR] < 42 AND '%wanted%' = 'water')
       STYLE
          COLOR 0 0 255
       END
    END
    CLASS
       NAME "wood"
       EXPRESSION ([MAJOR] >= 42 AND '%wanted%' = 'wood')
       STYLE
          COLOR 0 255 0
       END
    END
END

Para desenhar apenas os recursos da água, você usaria uma solicitação de URL como esta: http: //localhost/cgi-bin/mapserv.exe? Map = / ms4w / apps / mymapfile.map & mode = map & wanted = wood

Como essa é a terceira maneira válida de atingir seu objetivo, você realmente deseja pensar sobre quais são seus objetivos. Se seus dados mudarem com freqüência, convém optar por esta opção. Se seus dados não mudam com tanta frequência, eu pessoalmente usaria duas camadas. Eu poderia até dividir o shapefile em vários shapefiles por tipo de uso da terra, se isso melhorasse o desempenho. (Talvez não, os filtros de camada são bastante eficientes). Com o mapeamento da Web, quanto mais você pré-otimizar seus dados, melhor.

DavidF
fonte
7

No seu caso, você deve ter duas camadas, uma para madeira e outra para água. Você pode ter duas camadas usando o mesmo shapefile.

Em seguida, você pode escolher quais camadas visualizar diretamente na solicitação pelo parâmetro LAYERS. As classes representam apenas partes diferentes dos dados (por exemplo, como os dados nessas camadas devem ser renderizados).

Peter
fonte
4

Se você realmente precisa de todos eles em uma camada, pode usar Estilos Nomeados para conseguir isso. Veja aqui para mais detalhes. A sugestão de Peter de múltiplas camadas é, de muitas maneiras, uma abordagem muito mais simples.

Howard Butler
fonte