Jak mogę wyświetlić tylko niektóre klasy warstwy w UMN-mapserver?

9

Wizualizuję warstwę kształtu w serwerze map. Teraz chcę wysłać prośby tylko o niektóre klasy tej warstwy. Chcę na przykład jedno zapytanie tylko o klasy wodne, a później tylko o klasy drewniane. Czy mogę to zrealizować za pomocą serwera map?

Memento
źródło

Odpowiedzi:

7

Oto inny sposób, w jaki możesz to zrobić. Ten sposób wymaga użycia jednej warstwy z wyrażeniami w każdej klasie. Robienie tego w ten sposób jest nieco droższe, ponieważ wymaga wyrażeń logicznych, ale nigdy nie zauważysz różnicy, chyba że trafisz na naprawdę obciążone sytuacje.

Każda klasa ma dwuczęściowe wyrażenie. Obie części wyrażenia muszą być prawdziwe, aby rysować funkcje. Pierwsza część wyrażenia wybiera funkcje, które powinny należeć do tej klasy na podstawie atrybutu w twoim pliku kształtu. Druga część wyrażenia ocenia wartość zmiennej przekazanej przez adres URL. Nie ma znaczenia, jak nazwiesz zmienną w swoim adresie URL (nie używaj żadnych zastrzeżonych słów, takich jak „warstwa”), wystarczy dopasować nazwę zmiennej w wyrażeniu.

Oto kilka przykładowych warstw:

LAYER
  NAME "watersheds"
  STATUS DEFAULT
  DATA 'majclip'
  TYPE POLYGON
    CLASS
       NAME "water"
       EXPRESSION ([MAJOR] < 42 AND '%wanted%' = 'water')
       STYLE
          COLOR 0 0 255
       END
    END
    CLASS
       NAME "wood"
       EXPRESSION ([MAJOR] >= 42 AND '%wanted%' = 'wood')
       STYLE
          COLOR 0 255 0
       END
    END
END

Aby narysować tylko funkcje wodne, należy użyć żądania adresu URL takiego: http: //localhost/cgi-bin/mapserv.exe? Map = / ms4w / apps / mymapfile.map & mode = map & Want = wood

Ponieważ jest to trzeci ważny sposób na osiągnięcie celu, naprawdę chcesz pomyśleć o swoich celach. Jeśli Twoje dane często się zmieniają, możesz skorzystać z tej opcji. Jeśli twoje dane nie zmieniają się tak często, osobiście wybrałbym dwie warstwy. Mógłbym nawet podzielić plik kształtów na wiele plików kształtów według typu użytkowania gruntów, jeśli to poprawi wydajność. (Może nie, filtry warstw są dość wydajne). Dzięki mapowaniu sieciowemu, im bardziej wstępnie zoptymalizujesz swoje dane, tym lepiej.

DavidF
źródło
7

Powinieneś w swoim przypadku mieć dwie warstwy, jedną na drewno, a drugą na wodę. Możesz mieć dwie warstwy przy użyciu tego samego pliku kształtu.

Następnie możesz wybrać, które warstwy mają być wizualizowane bezpośrednio w żądaniu za pomocą parametru WARSTWY. Klasy reprezentują tylko różne części danych (np. Sposób renderowania danych w tych warstwach).

Piotr
źródło
4

Jeśli naprawdę potrzebujesz ich wszystkich w jednej warstwie, możesz to zrobić, korzystając ze stylów nazwanych. Zobacz tutaj po więcej szczegółów. Sugestia Piotra dotycząca wielu warstw jest jednak pod wieloma względami znacznie prostszym podejściem.

Howard Butler
źródło