¿Es posible rellenar polígonos para que sean completamente transparentes en MapServer? Quiero tener un fondo negro que sea ligeramente opaco, y donde haya un polígono quiero que quede completamente claro sin relleno. Establezco mi fondo de la siguiente manera:
IMAGECOLOR 0 0 0
TRANSPARENT OFF
Intenté crear una clase que sea blanca para llenar el polígono, y experimenté con la opacidad usando TRANSPARENCY
valores de 0 a 100, pero no resulta en un polígono claro:
CLASS
NAME "light"
EXPRESSION ([max_cost] == 2000)
STYLE
OUTLINECOLOR 255 255 255
COLOR 255 255 255
SIZE 1
WIDTH 2.0
END
END
Esto da como resultado el siguiente tipo de imagen:
En lugar de que el polígono tenga un relleno blanco; Quiero que tenga un relleno sin color. Encontré una sugerencia en línea para definir el color de esta manera:
COLOR -1 -1 -1
Pero tampoco funcionó. En esta parte de la documentación, se describe lo siguiente:
"PALETTE = / path / to / palette.txt" se utiliza para definir la ruta absoluta donde se pueden encontrar los colores de la paleta. Este archivo debe contener 256 entradas de tripletes r, g, b para modos de imagen RGB, o r, g, b, un cuadruplete para modos de imagen RGBA. El formato esperado es un triplete (o cuadruplete) por línea, cada valor separado por comas y cada triplete / cuadruplete en una sola línea. Si desea utilizar la transparencia con una paleta, es importante tener estos dos colores en el archivo de paleta: 0,0,0,0 y 255,255,255,255.
Después de leer esto, también intenté usar COLOR 0 0 0 0
pero esto arroja un error:
Identificador desconocido. Error de análisis cerca de (0) :( línea 71)
No entiendo cómo me refiero a un color definido, PALETTE=/path/to/palette.txt
pero esta parece ser una forma posible de lograrlo.
Respuestas:
Mapserver ha introducido recientemente el concepto de capas de máscara (una máscara se comporta como una máscara en Photoshop al combinarse con la capa a la que se aplica).
El RFC describe lo que hacen y cómo se pueden usar. Al leer su respuesta, parece que podría usar una capa de máscara para obtener el efecto 'ojo de cerradura' que está buscando.
No estoy seguro de si esta característica llegó al 6.2 que se lanzó hace un par de semanas.
fuente
Por lo tanto, desea "penetrar" el fondo negro por sus polígonos transparentes para ver el fondo inferior. No estoy seguro de que sea posible con MapServer, pero puedo sugerir otro truco.
Puede crear un polígono muy grande que cubra toda su área e incluso más extendido, utilizando cualquier software SIG. Luego puede borrar sus polígonos de este polígono de área, y luego este polígono perforado puede colocarlo en MapServer y hacerlo negro, en lugar del fondo negro. Los agujeros correspondientes a sus polígonos serán "transparentes".
fuente
Tenía estas líneas en mi archivo .map y la transparencia inferior a 100 estaba funcionando.
Espero eso ayude.
fuente
TRANSPARENCY
0 a 100 y parecía que solo ajustaba la opacidad. Me doy cuenta de que esto no estaba claro en mi pregunta inicialmente: lo revisé.A continuación se muestra una imagen de muestra que muestra una capa de máscara transparente. Si hace que la máscara sea mucho más grande, entonces su usuario no notará los bordes exteriores. Similar a lo que sugirió @nadya, puedes:
En este punto, tendrás una máscara terminada. Sin embargo, si desea agregar etiquetas a los espacios recortados, deberá agregar (utilizando una herramienta de Unión) los polígonos más pequeños de nuevo a la máscara. Luego, con un archivo SLD en Mapserver, puede diseñar la máscara como gris transparente, y aplicar estilo a los recortes como completamente transparente, y aplicar las etiquetas allí. Aquí hay un archivo SLD de muestra (esto fue construido para Geoserver):
Tenga en cuenta que los polígonos necesitarían tener la propiedad "TIPO" con valores "internos" o "externos" para que esto funcione correctamente.
fuente