Czy można wypełnić wielokąty, aby były całkowicie przezroczyste w MapServer? Chcę mieć czarne tło, które jest nieco nieprzezroczyste, i gdziekolwiek jest wielokąt, chcę, aby było całkowicie czyste bez wypełnienia. Ustawiam swoje tło w następujący sposób:
IMAGECOLOR 0 0 0
TRANSPARENT OFF
Próbowałem utworzyć klasę, która jest biała do wypełnienia wielokąta, i eksperymentowałem z kryciem przy użyciu TRANSPARENCY
wartości od 0 do 100, ale nie daje to wyraźnego wielokąta:
CLASS
NAME "light"
EXPRESSION ([max_cost] == 2000)
STYLE
OUTLINECOLOR 255 255 255
COLOR 255 255 255
SIZE 1
WIDTH 2.0
END
END
Wynikiem tego jest następujący typ obrazu:
Zamiast wielokąta z białym wypełnieniem; Chcę, żeby miał wypełnienie bez koloru. Znalazłem jedną sugestię online, aby zdefiniować taki kolor:
COLOR -1 -1 -1
ale to też nie działało. W tej części dokumentacji opisano następujące elementy:
„PALETTE = / path / to / palette.txt” służy do zdefiniowania ścieżki bezwzględnej, w której można znaleźć kolory palety. Ten plik musi zawierać 256 pozycji trypletów r, g, b dla trybów graficznych RGB lub r, g, b, kwadrupletów dla trybów graficznych RGBA. Oczekiwany format to jeden triplet (lub kwadruplet) na linię, każda wartość oddzielona przecinkami, a każda triplet / kwadruplet w jednym wierszu. Jeśli chcesz używać przezroczystości z paletą, ważne jest, aby mieć dwa kolory w pliku palety: 0,0,0,0 i 255,255,255,255.
Po przeczytaniu tego również próbowałem użyć, COLOR 0 0 0 0
ale powoduje to błąd:
Nieznany identyfikator. Błąd analizowania w pobliżu (0) :( linia 71)
Nie rozumiem, w jaki sposób odnoszę się do określonego koloru, PALETTE=/path/to/palette.txt
ale wydaje się, że jest to jeden z możliwych sposobów na osiągnięcie tego.
Odpowiedzi:
Mapserver niedawno wprowadził pojęcie warstw maski (maska zachowuje się podobnie do maski w Photoshopie, mieszając się z warstwą, na którą jest nakładana).
RFC opisuje to, co robią i jak można je wykorzystać. Po przeczytaniu odpowiedzi wydaje się, że można użyć warstwy maski, aby uzyskać efekt dziurki od klucza, którego szukasz.
Nie jestem pewien, czy ta funkcja znalazła się w wersji 6.2 wydanej kilka tygodni temu.
źródło
Dlatego chcesz „przeniknąć” czarne tło przez przezroczyste wielokąty, aby zobaczyć dolne tło. Nie jestem pewien, czy jest to możliwe dzięki MapServer, ale mogę zasugerować inną sztuczkę.
Za pomocą dowolnego oprogramowania GIS możesz stworzyć bardzo duży wielokąt obejmujący cały twój obszar, a nawet bardziej rozbudowany. Następnie możesz wymazać swoje wielokąty z tego wielokąta obszaru, a następnie ten wielokątny wielobok można umieścić na MapServer i uczynić go czarnym, zamiast czarnego tła. Otwory odpowiadające twoim wielokątom będą „przezroczyste”.
źródło
Miałem te linie w pliku .map i przezroczystość poniżej 100 działała.
Mam nadzieję, że to pomoże.
źródło
TRANSPARENCY
od 0 do 100 i wydawało się, że po prostu dostosowuje krycie. Zdaję sobie sprawę, że w moim pytaniu nie było to jasne - poprawiłem je.Poniżej znajduje się przykładowy obraz przedstawiający przezroczystą warstwę maski. Jeśli powiększysz maskę, użytkownik nie zauważy zewnętrznych krawędzi. Podobnie do sugestii @nadya, możesz:
W tym momencie będziesz mieć gotową maskę. Jeśli jednak chcesz dodać etykiety do wyciętych przestrzeni, musisz dodać (za pomocą narzędzia Unii) mniejsze wielokąty z powrotem do maski. Następnie, korzystając z pliku SLD w Mapserver, możesz stylizować maskę jako przezroczystą szarość, a styl wycinków jako całkowicie przezroczystą i zastosować tam etykiety. Oto przykładowy plik SLD (ten został zbudowany dla Geoserver):
Zauważ, że wielokąty musiałyby mieć właściwość „TYPE” z wartościami „wewnętrzna” lub „zewnętrzna”, aby działało to poprawnie.
źródło