Ответы:
Вот еще один способ, которым вы можете сделать это. Этот способ предполагает использование одного слоя с выражениями в каждом классе. Это немного «дороже» сделать так, потому что оно включает в себя логические выражения, но вы никогда не заметите разницу, если не столкнетесь с ситуациями с высокой нагрузкой.
Каждый класс состоит из двух частей. Обе части выражения должны быть истинными для объектов, которые будут нарисованы. Первая часть выражения выбирает объекты, которые должны попадать в этот класс, на основе атрибута в вашем шейп-файле. Вторая часть выражения оценивает значение переменной, переданной через URL. Неважно, как вы называете переменную в своем URL (не используйте никаких зарезервированных слов, таких как «слой»), оно просто должно соответствовать имени переменной в вашем выражении.
Вот несколько примеров слоев:
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
Чтобы нарисовать только водные объекты, вы должны использовать URL-запрос, например, такой: http: //localhost/cgi-bin/mapserv.exe? Map = / ms4w / apps / mymapfile.map & mode = map & wanted = wood
Поскольку это третий действительный способ достижения вашей цели, вы действительно хотите подумать о том, каковы ваши цели. Если ваши данные часто изменяются, вы можете использовать эту опцию. Если ваши данные не меняются так часто, я бы лично пошел с двумя слоями. Я мог бы даже разбить шейп-файл на несколько шейп-файлов по типу землепользования, если это улучшило производительность. (Возможно, фильтры слоев довольно эффективны). Благодаря веб-картографированию, чем больше вы предварительно оптимизируете свои данные, тем лучше.
В вашем случае вы должны иметь два слоя, один для дерева и один для воды. Вы можете иметь два слоя, используя один и тот же шейп-файл.
Затем вы можете выбрать, какие слои визуализировать непосредственно в запросе с помощью параметра LAYERS. Классы представляют только разные части данных (например, как должны отображаться данные в этих слоях).
Если вам действительно нужны все они в одном слое, вы можете использовать именованные стили для достижения этой цели. Смотрите здесь для более подробной информации. Однако предложение Питера о нескольких слоях во многих отношениях гораздо проще.