Как я могу показать только некоторые классы слоя в UMN-mapserver?

9

Я визуализирую слой формы в картсервере. Теперь я хочу сделать несколько запросов только для некоторых классов этого слоя. Я хочу, например, один запрос только для классов по воде, а позже - только для классов по дереву. Могу ли я реализовать это с помощью картсервера?

Mnementh
источник

Ответы:

7

Вот еще один способ, которым вы можете сделать это. Этот способ предполагает использование одного слоя с выражениями в каждом классе. Это немного «дороже» сделать так, потому что оно включает в себя логические выражения, но вы никогда не заметите разницу, если не столкнетесь с ситуациями с высокой нагрузкой.

Каждый класс состоит из двух частей. Обе части выражения должны быть истинными для объектов, которые будут нарисованы. Первая часть выражения выбирает объекты, которые должны попадать в этот класс, на основе атрибута в вашем шейп-файле. Вторая часть выражения оценивает значение переменной, переданной через 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

Поскольку это третий действительный способ достижения вашей цели, вы действительно хотите подумать о том, каковы ваши цели. Если ваши данные часто изменяются, вы можете использовать эту опцию. Если ваши данные не меняются так часто, я бы лично пошел с двумя слоями. Я мог бы даже разбить шейп-файл на несколько шейп-файлов по типу землепользования, если это улучшило производительность. (Возможно, фильтры слоев довольно эффективны). Благодаря веб-картографированию, чем больше вы предварительно оптимизируете свои данные, тем лучше.

DavidF
источник
7

В вашем случае вы должны иметь два слоя, один для дерева и один для воды. Вы можете иметь два слоя, используя один и тот же шейп-файл.

Затем вы можете выбрать, какие слои визуализировать непосредственно в запросе с помощью параметра LAYERS. Классы представляют только разные части данных (например, как должны отображаться данные в этих слоях).

Питер
источник
4

Если вам действительно нужны все они в одном слое, вы можете использовать именованные стили для достижения этой цели. Смотрите здесь для более подробной информации. Однако предложение Питера о нескольких слоях во многих отношениях гораздо проще.

Говард Батлер
источник