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.