Forum QGIS

Pełna wersja: Długie odświeżanie map WMS
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam.
Chciałbym się poradzić co mogę zrobić z długim odświeżaniem map (rastrów) umieszczonych na wewnętrznym serwerze WMS (MapServer-Apache). Problem polega na tym, iż podczas przesuwania mapy, długo (od 3 do 6 sekund) trwa odświeżenie całej treści. Bez warstw WMS same wektory z bazy Postgis śmigają dość szybko. Dodam, że mapy WMS pojawiają się dopiero od skali 1:2000. Serwer na którym pracuje zarówno baza Postgresql jak i Map Server to Windows Server Standard SP2, Intel Xeon E3110 (2*3.0GHz) i 4GB RAM. Wydawałoby się, że powinien być wystarczający aczkolwiek przy przewijaniu mapy zarówno stacja kliencka jak i serwer są bardzo obciążone (głownie procesor, ramu jest dość). Rastrów mam około 800. Są one na różnych warstwach WMS (mapy z różnych układów współrzędnych). Stawiając MapSerwer najpierw stworzyłem piramidy dla wszystkich rastrów, następnie stworzyłem z nich plik VRT zapisany w oddzielnych projektach QGIS (dla poszczególnych układów). I tak mam między innymi projekt 42.qgs w którym znajduje się tylko plik 42.vrt złożony z rastrów w układzie 1942. Taki projekt został wyeksportowany do MapServera w formacie JPG a adresy WMS dodane do głównego projektu mapy jako warstwa WMS. Tak samo sprawa wygląda z pozostałymi układami np 1965. Nie tworzyłem piramidy dla plików VRT gdyż są one zrobione osobno dla każdego pliku TIFF, z których składa się VRT. Jeżeli lepiej zrobić piramidę dla pliku VRT, zamiast dla pojedynczych rastrów, to dajcie znać aczkolwiek w moim przypadku plik OVR będzie gigantyczny! Może nie należy tworzyć pliku VRT tylko wyeksportować projekt z wszystkimi mapami (dla danego układu)? Jeżeli są jeszcze jakieś inne metody przyśpieszenia wyświetlania rastrów na serwerze WMS to proszę o poradę.
Pozdrawiam.
PS1. Dołączam zrzut ekranu na którym widać główny projekt.
PS2. Stacje klienckie pracują na Win XP/Vista/7 głównie z Qgis 1.5 i 1.6.
Trochę nie na temat WMSa, ale może Ci się przyda.
Ja podobny projekt zrealizowałem za pomocą serwera plików. Wszystkie rastry (jakieś 800-900 plików) umieściłem w jednym folderze na serwerze. Każdy pojedynczy raster ma wyliczone kilka piramidek (chyba cztery pierwsze), bo akurat takie pliki dostałem z geodezji. Następnie zrobiłem z tego VRT i wyliczyłem piramidy dla całości. Mniej więcej oszacowałem które są potrzebne i nie pokrywają się z tymi z pojedynczych plików. Plik VRT ustawiam jako warstwę w projekcie QGISa i wszystko działa przyzwoicie.
Piramidy dla VRT są w tym przypadku konieczne, bo inaczej QGIS, tworząc np. miniaturkę warstwy, musi przeczytać dane z kilkuset plików i połączyć je w całość. A wtedy otwarcie takiej warstwy trwa wieki...
Testy WMSa też mamy w planie, ale jeszcze nie wiem kiedy. Po ich przeprowadzeniu będę wiedział co jest szybsze.
Pamiętam... już kiedyś o tym rozmawialiśmy. Nie próbowałem z samymi plikami VRT ale jeżeli chodzi o WMS to nie widzę zbytniej różnicy czy mam piramidę dla pliku VRT czy osobne piramidy dla wszystkich plików z których składa się VRT. Działa na podobnym akceptowalnym poziomie, ale myślałem, że może coś jeszcze przyśpieszę.
Jeżeli ktoś gdzieś widzi jakąś szansę to proszę o info.
Pozdrawiam
Jak chcesz naprawdę szybko, to tylko kafle...
Cześć Borys.
Kafle ale jak? Jakim narzędziem je stworzyć i czy dla rastrów TIFF czy całych VRT? A może dopiero na serwerze WMS?
Jeżeli mógłbyś przybliżyć temat to będę wdzięczny?
Pozdrawiam.
No chyba dla całości. Metody są dwie:

1) Stawiasz wmsa i między niego a klienta wstawiasz TileCache (chyba, że WMS ma już wbudowany cache, jak GeoWebCache w Geoserverze). Cache będzie się napełniał w miarę korzystania, ale możesz też puścić skrypt, który pobierze z WMSa wszystkie możliwe kafle i wtedy WMSa można już wyrzucić. TileCache będzie odpowiadał zarówno na żądania WMS/C, jak i TMS. http://tilecache.org/

2) Są skrypty, które ze źródłowego rastra (choćby tego vrt) zbudują strukturę katalogów z kaflami. Na przykład gdal2tiles, ktoś tu kiedyś (Odoakr?) chyba próbował jakichś innych. Potem katalog z tymi plikami po prostu serwujesz Apaczem i podpinasz się do niego klientem TMS.

Metoda 2 jest dużo prostsza, ale wymusza protokół TMS, a Quantum póki co lepiej obsługuje WMS/C. Podpinasz jako WMS, szereg skal automatycznie blokuje się do istniejących kafli i gitara gra. Natomiast TMS możesz podpiąć na dwa sposoby, przy czym żaden nie jest idealny:
a) jako normalną warstwę rastrową GDAL (http://terraobserver.blogspot.com/2011/0...-qgis.html). Sęk w tym, że szereg skal nie jest zablokowany i trzeba się gimnastykować, żeby trafiać w skale kafli, inaczej raster jest po prostu brzydko reskalowany. Druga sprawa to, o ile pamiętam, kiepska jakość wydruku (zdaje się, że do wydruku idą te same kafle, co na ekran i do tego trafiać w skalę można już tylko z kalkulatorem w ręku Smile ) UWAGA: w 1.7 wczoraj wieczorem popsuliśmy obsługę TMSów, wprowadzając reprojekcję rastrów w locie i do odwołania nie da się otwierać TMSów w ten sposób.

b) przez wtyczkę OpenLayers (modyfikując jej kod pod Twoją warstwę). Szereg skal trzyma, ale ta wtyczka jest dość desperackim obejściem problemów z TMSem przez wprowadzenie do Quantuma przeglądarki webowej i jest daleka od ideału.
________________________________________
EDIT: Oczywiście popsuta obsługa TMSów została już dawno naprawiona Smile
Wow... no łatwo nie będzie. Dzięki Borys. Jak znajdę trochę czasu i dojdę do jakiś wyników to dam znać.
Pozdrawiam.
Trochę odświeżę temat ze względu na podobny problem.

Stawiam Mapservera, na którym mają być wyświetlane rastry w większej ilości. Tak aby ktoś w przeglądarce mógł sprawnie sobie podglądnąć interesujący go obszar, a potem wydrukować go, w dobrej jakości. Analizując wypowiedź Borysa doszłam do wniosku, że chyba najlepszym rozwiązaniem byłby TileCache. I teraz moje pytania:

-czy on serwuje już gotowe kafelki dla danej skali, wybranej przez użytkownika? czy trzeba i tak stworzyć osobno kafelki dla każdego rastra?
- czym się różni TMS a TileCache
- jak połączyć TileCache z Mapserverem? Dodać jakiś plik, część składni w pliku map lub w innym
- A może w mapserverze jest jakiś inny sposób na sprawne wyświetlanie dużej ilości rastrów bez tracenia na jakości?

I jeszcze jedno. Mapserver ma ograniczoną ilość klas, bodajże coś ok.200. Więc jak zapodać mu większą ilość rastrów np. 500, gdy (wg mojej wiedzy) w jednej klasie może być jeden raster?
Poruszyłaś temat, który całkiem niedługo sam będę przerabiał i jestem bardzo ciekawy odpowiedzi kogoś mądrzejszego Smile. Ze swojej strony mogę tylko powiedzieć, że ograniczenia mapserver'a dotyczą ilości warstw (nie klas) i jest to właśnie ok 200, a co do dużej liczby rastrów to najprostszym sposobem jest stworzenie wirtualnego rastra dla Twoich plików (tzw. plik VRT), który będzie w stanie wyświetlić dużą liczbę rastrów razem na jednej warstwie mapserver'a.

Musisz tylko pamiętać, że rastry muszę mieć taką samą kolorystykę (PCT czyli skala szarości, albo RGB) i taki sam układ współrzędnych - to wynika z moich zabaw z rastrami, ale wiem, że są jeszcze inne parametry mające znaczenie - tylko nie doszedłem jeszcze jakie... Wink.
Dzięki za małą podpowiedźSmile I oczywiście warstw - tak jakoś z rozbiegu wyszło. Myślałam już nad tym i też doszłam do wniosku, że będzie potrzebny VRT. Ale jeszcze nigdy nie tworzyłam, więc zobaczymy co tego wszystkiego wyjdzieSmile
Stron: 1 2