Страница 1 из 1

Label для всего слоя

Добавлено: 03 сен 2010, 05:42
Artem
Добрый день. В map-файле есть слой с кучей классов, можно ли как-то задать подпись всему слою, а не каждому классу отдельно? А то нерационально как-то пихать LABEL в каждый класс, тем более если он одинаковый.
Спасибо за внимание

Re: Label для всего слоя

Добавлено: 03 сен 2010, 16:31
Mavka
Попробуйте создать еще один класс без фильтра и в нем пропишите надписи.

Re: Label для всего слоя

Добавлено: 06 сен 2010, 08:28
Artem
Пробовал естественно, такой класс либо скрывает все остальные (если он первый), либо сам невидим (если последний).

Код: Выделить всё

CLASS
   NAME "Красноярский край"
   EXPRESSION ([CODE]=1)
   STYLE
    COLOR 255 153 204
    OUTLINECOLOR 85 85 85
   END
  END
  CLASS
   NAME "Республика Хакасия"
   EXPRESSION ([CODE]=2)
   STYLE
    COLOR 153 204 255
    OUTLINECOLOR 85 85 85
   END
  END
  CLASS
   NAME "Республика Тыва"
   EXPRESSION ([CODE]=3)
   STYLE
    COLOR 255 255 204
    OUTLINECOLOR 85 85 85
   END
  END
Принцип - расцветить субъекты разными цветами, а подпись задать одинаковую. Пришлось вставить в каждый класс. Вот и хочется узнать: подпись отдельно от класса существовать не может, глюк это или я чего не понимаю?

Re: Label для всего слоя

Добавлено: 06 сен 2010, 12:38
Mavka
Действительно, документация говорит что "only a single class will be used for the rendering of a feature". Значит придется в каждый класс вписывать label. Или создать отдельный слой специально для подписей.

Позиция OGC Symbology Encoding в этом плане противоположная (п. 10.3 Feature filtering):
Filters used in different Rules applicable to the same FeatureTypeStyle are allowed to overlap in terms of the features selected by each rule. The map styler must execute all rules that are applicable to a feature in the order that the rules appear. For example, if one rule for a user style has the (SQL) condition “num_lanes >= 6” and a subsequent rule has the condition “num_lanes >= 4”, then all roads with four or more lanes would cause both rules to “fire”. If the style of the first rule is to draw thick blue lines and the second it to draw thin black lines, then roads with six or more lanes would be drawn with thin black lines over top of thick blue ones. Whether all features are applied to each rule in sequence or whether all suitable rules are applied to each feature in sequence is implementation-specific, although there may be subtle differences in the appearance of maps resulting from each of the approaches.
Коротко: Eсли в стиле есть несколько правил с перекрывающимися условиями, то рисовать нужно оба. Например такой стиль для автодороги:
  • если полос >= 6 - жирная синяя линия
  • если полос >= 4 - тонкая черная
Тогда дорога на 6 полос сначала будет нарисована жирной синей, а потом сработает второе правило и сверху наложится тонкая черная.

Re: Label для всего слоя

Добавлено: 06 сен 2010, 12:48
Artem
Ясно, спасибо, тогда наверное правильнее прописать LABEL в каждый слой.

Re: Label для всего слоя

Добавлено: 06 сен 2010, 20:10
Mavka
Еще один вариант. Сделать два слоя - один специально для надписей. А потом свести их вместе используя GROUP

Re: Label для всего слоя

Добавлено: 07 сен 2010, 04:11
Artem
Group - можно, но тут свои подводные камни: получается что один и тот же слой я вызываю дважды. Это на скорости не скажется? Второе: если я , например, захочу добавить идентификатор (когда мышой тыкаешь и всплывает окно с информацией по слою), то как будет реагировать сервер? Покажет что у меня есть 2 слоя с такой-то информацией?

Re: Label для всего слоя

Добавлено: 07 сен 2010, 09:30
Mavka
На скорости не скажется. Запрос WMS GetFeatureInfo будет делаться только к источнику данных, а он - один.