É possível preencher polígonos para que sejam completamente transparentes no MapServer? Quero ter um fundo preto ligeiramente opaco e, onde quer que haja um polígono, quero que fique completamente claro, sem preenchimento. Defino meu histórico da seguinte maneira:
IMAGECOLOR 0 0 0
TRANSPARENT OFF
Tentei criar uma classe branca para preencher o polígono e experimentei a opacidade usando TRANSPARENCY
valores de 0 a 100, mas isso não resulta em um 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
Isso resulta no seguinte tipo de imagem:
Em vez de o polígono ter um preenchimento branco; Quero que ele seja preenchido sem cor. Encontrei uma sugestão online para definir a cor assim:
COLOR -1 -1 -1
mas também não funcionou. Nesta parte da documentação, é descrito o seguinte:
"PALETTE = / path / to / palette.txt" é usado para definir o caminho absoluto onde as cores da paleta podem ser encontradas. Este arquivo deve conter 256 entradas de trigêmeos r, g, b para imagemodes RGB, ou r, g, b, a quádruplos para imagemodes RGBA. O formato esperado é um tripleto (ou quádruplo) por linha, cada valor separado por vírgulas e cada tripleto / quádruplo em uma única linha. Se você deseja usar a transparência com uma paleta, é importante ter essas duas cores no arquivo da paleta: 0,0,0,0 e 255,255,255,255.
Depois de ler isso, eu também tentei usar, COLOR 0 0 0 0
mas isso gera um erro:
Identificador desconhecido. Erro de análise próximo a (0) :( linha 71)
Não entendo como me refiro a uma cor definida, PALETTE=/path/to/palette.txt
mas essa parece ser uma maneira possível de conseguir isso.
Respostas:
O Mapserver introduziu recentemente o conceito de camadas de máscara (uma máscara se comporta como uma máscara no Photoshop misturando-se com a camada à qual é aplicada).
O RFC descreve o que eles fazem e como podem ser usados. Ao ler sua resposta, parece que você pode usar uma camada de máscara para obter o efeito 'buraco da fechadura' que está procurando.
Não tenho certeza se esse recurso chegou ao 6.2 lançado algumas semanas atrás.
fonte
Portanto, você deseja "penetrar" no plano de fundo preto pelos polígonos transparentes para ver o plano de fundo inferior. Não tenho certeza de que isso seja possível com o MapServer, mas posso sugerir outro truque.
Você pode criar um polígono muito grande, cobrindo toda a sua área e ainda mais, usando qualquer software GIS. Em seguida, você pode apagar seus polígonos desse polígono da área e, em seguida, colocar esse polígono com orifício no MapServer e torná-lo preto, em vez do fundo preto. Os furos correspondentes aos seus polígonos serão "transparentes".
fonte
Eu tinha essas linhas no meu arquivo .map e a transparência menor que 100 estava funcionando.
Espero que ajude.
fonte
TRANSPARENCY
0 a 100 e parecia ajustar a opacidade. Sei que isso não ficou claro na minha pergunta inicialmente - eu a revisei.Abaixo está uma imagem de amostra mostrando uma camada de máscara transparente. Se você aumentar a máscara, seu usuário não perceberá as bordas externas. Semelhante ao que @nadya sugeriu, você pode:
Nesse ponto, você terá uma máscara finalizada. No entanto, se você deseja adicionar etiquetas aos espaços recortados, precisará adicionar (usando uma ferramenta União) os polígonos menores de volta à máscara. Em seguida, com um arquivo SLD no Mapserver, você pode estilizar a máscara como cinza transparente, estilizar os recortes como completamente transparentes e aplicar os rótulos nela. Aqui está um arquivo SLD de amostra (criado para o Geoserver):
Observe que os polígonos precisariam ter a propriedade "TYPE" com os valores "interno" ou "externo" para que isso funcionasse corretamente.
fonte