Wydajność przetwarzania danych z plików GML w QGIS

Przetwarzając duże ilości danych szczególnie w plikach GML łatwo można natknąć się na sytuację kiedy wydajność QGIS jest niewystarczająca.

Przykładowy plik jakim się posłużymy w celu zobrazowania wpływu jaki ma kilka czynników na przetwarzanie i wyświetlanie danych to dane z PRG z adresami zapisane przez CODGiK w formacie GML. Można je pobrać bezpłatnie na stronie CODGiK

Środowisko testowe jakiego użyję to Qgis 2.8.2 (do pobrania tutaj)

W celu możliwości podglądu szybkości wyświetlania zaznaczamy włączoną widoczność okna komunikatów w menu widok > panele > komunikaty oraz zaznaczamy w menu ustawienia opcje w zakładce renderowanie > śledzenie błędów > odświeżanie obszaru mapy

sledzenie_bledow_qgis

Z pliku z adresami wczytujemy plik lubuskie.gml do Qgis za pomocą polecenia dodaj warstwę wektorową.

Po chwili oczekiwania zależnej do mocy komputera wyświetla się okienko wyboru odwzorowania po wyborze którego program wczyta dane. Jak można zaobserwować w oknie komunikatów okres oczekiwania na wyświetlenie pliku jest dosyć długi. (Na moim komputerze 34797ms).

Uruchomiony proces Qgisa wczytujący dane gml bada strukturę pliku gml, wczytuje go do programu oraz wyświetla go. Sprawdźmy co się stanie kiedy każemy Qgisowi nie wyświetlać wczytywanego pliku. W tym celu w menu ustawienia > opcje > renderowanie odznaczamy opcje domyślnie nowo wczytywane warstwy są wyświetlane. Po dużo krótszym oczekiwaniu pojawia się warstwa której wyświetlanie jest odznaczone (31ms).

Można używać tej opcji domyślnie np gdy nie zależy nam na wyświetlaniu danych, ale tylko na ich zapisaniu do innego formatu lub analizach na nich. W przypadku kiedy istnieje z plikiem gml plik gfs o tej samej nazwie struktura jest odczytywana z tego pliku co nieco zwalnia proces wczytywania.

W opcjach programu ustawienia > opcje > renderowanie istnieje możliwość wyświetlania opcji użyj pamięci podręcznej aby przyspieszyć odświeżanie oraz możliwość wykorzystania wielu rdzeni procesora. Na silnych komputerach z dużą ilością RAM znacząco przyspiesza to wyświetlanie dużej ilości danych. Niestety nie ma to wpływu na wczytywanie gml gdzie wąskim gardłem jest parser.

wlasciwosci_wyswietlania_qgis

Spróbujmy dane z gml zapisać do bazy spatialite. Jest to postać danych, która pozwala przechowywać dane z gml bez obciętych nagłówków ponieważ przechowuje długie nazwy kolumn. Z okna zapisz jako wybieramy opcje zapisz jako i zapisujemy jako bazę spatialite.

sptialite_qgis

Wczytując za pomocą polecenia dodaj warstwę wektorową bazę z danymi zobaczymy że czasy odczytu są wielokrotnie krótsze bo przy włączonych opcjach wieloprocesorowego przetwarzania tylko 3717ms czyli 10% tego co w przypadku pliku gml. Dane takie da się też edytować.

W przypadku gdyby ktoś zdecydował siędo zapisywania plików gml do formatu shp czego nie polecam ze względu na ograniczenia formatu o których napisałem tutaj można w celu zwiększenia wydajności użyć opcji wektor > narzędzia zarządzania danymi > twórz indeks przestrzenny. Prawopodobnie poprawi to wydajność pracy z plikiem shp.

Twórcy Qgisa pracują obecnie nad kolejną wersją programu w której skupią się na zwiększeniu wydajności i niezawodności narzędzi. Według zapowiedzi będą dostępne w kolejnej wersji.

Jeśli chcecie wiedzieć więcej o przetwarzaniu danych gml w tym w Qgis zapraszam do zapoznania się z ofertą szkoleń.