Можно ли заполнить полигоны так, чтобы они были полностью прозрачными в MapServer? Я хочу, чтобы черный фон был слегка непрозрачным, и везде, где есть многоугольник, я хочу, чтобы он был полностью прозрачным без заливки. Я установил свой фон следующим образом:
IMAGECOLOR 0 0 0
TRANSPARENT OFF
Я попытался создать класс, который будет белым, чтобы заполнить многоугольник, и экспериментировал с непрозрачностью, используя TRANSPARENCY
значения от 0 до 100, но это не привело к чистому многоугольнику:
CLASS
NAME "light"
EXPRESSION ([max_cost] == 2000)
STYLE
OUTLINECOLOR 255 255 255
COLOR 255 255 255
SIZE 1
WIDTH 2.0
END
END
Это приводит к следующему типу изображения:
Вместо многоугольника, имеющего белую заливку; Я хочу, чтобы он имел заливку без цвета. Я нашел одно предложение онлайн, чтобы определить цвет следующим образом:
COLOR -1 -1 -1
но это тоже не сработало. В этой части документации описано следующее:
«PALETTE = / path / to / palette.txt» используется для определения абсолютного пути, где можно найти цвета палитры. Этот файл должен содержать 256 записей триплетов r, g, b для режимов изображения RGB или r, g, b - четверки для режимов изображения RGBA. Ожидаемый формат - один триплет (или квадруплет) на строку, каждое значение разделено запятыми, а каждый триплет / четверка на одной строке. Если вы хотите использовать прозрачность с палитрой, важно иметь эти два цвета в файле палитры: 0,0,0,0 и 255,255,255,255.
Прочитав это, я также попытался использовать, COLOR 0 0 0 0
но это выдает ошибку:
Неизвестный идентификатор. Ошибка разбора около (0) :( строка 71)
Я не понимаю, как я отношусь к определению цвета, PALETTE=/path/to/palette.txt
но это кажется одним из возможных способов достижения этого.
Ответы:
Mapserver недавно представил концепцию слоев маски (маска в Photoshop ведет себя подобно маске в сочетании со слоем, к которому она применяется).
RFC описывает то , что они делают и как они могут быть использованы. Прочитав ваш ответ, вы можете использовать слой маски, чтобы получить эффект «замочной скважины», который вы ищете.
Я не уверен, попала ли эта функция в 6.2, которая была выпущена пару недель назад.
источник
Итак, вы хотите «проникнуть» в черный фон с помощью прозрачных полигонов, чтобы увидеть нижний фон. Я не уверен, что это возможно с MapServer, но я могу предложить другой трюк.
Вы можете создать очень большой многоугольник, охватывающий всю вашу область и даже более расширенный, используя любое программное обеспечение ГИС. Затем вы можете стереть полигоны из этого многоугольника области, а затем этот многоугольник с отверстиями, который вы можете поместить в MapServer и сделать его черным, а не черным фоном. Отверстия, соответствующие вашим полигонам, будут «прозрачными».
источник
У меня были эти строки в моем файле .map, и прозрачность ниже 100 работала.
Надеюсь, поможет.
источник
TRANSPARENCY
от 0 до 100, и казалось, что он просто регулирует непрозрачность. Я понимаю, что это не было ясно в моем вопросе изначально - я пересмотрел это.Ниже приведен пример изображения с прозрачным слоем маски. Если вы сделаете маску намного больше, то ваш пользователь не заметит внешние края. Подобно тому, что предложил @nadya, вы можете:
На этом этапе у вас будет готовая маска. Однако, если вы хотите добавить метки к вырезанным полям, вам нужно будет добавить (с помощью инструмента «Объединение») меньшие полигоны обратно в маску. Затем, используя файл SLD в Mapserver, вы можете стилизовать маску как прозрачную серую, стилизовать вырезы как полностью прозрачные и нанести туда метки. Вот пример файла SLD (он был построен для Geoserver):
Обратите внимание, что для правильной работы полигонов необходимо иметь свойство «TYPE» со значениями «inner» или «external».
источник