Kontrolowanie wczytywania pliku GML do QGIS – plik gfs

W trakcie wczytywania pliku GML do QGIS tworzony jest w tym samym katalogu plik gfs o nazwie zgodnej z nazwą pliku gml. Plik ten jest plikiem xml tworzonym automatycznie przez QGIS zawierającym informację o wczytywanym gml, nazwie kolumn w QGIS, typie pól oraz zasięgu przestrzennym. Plik gfs można wykorzystać by wpłynąć na sposób w jaki Qgis wczytuje dane z pliku GML.

Przykładowe dane które można użyć do ćwiczeń to plik z adresami z województwa pomorskiego które udostępnił za darmo CODGiK (uwaga duży plik 530 mb). Ze względu na to, że nie każdy posiada silny komputer wyciąłem pierwsze 1500 obiektów z tego pliku aby plik szybko się wczytywał.

Po wczytaniu pliku gml do Qgis tworzy się plik gfs. Otwierając ten plik za pomocą programu notepad++ i ustawiając wyświetlanie w tym programie jako xml (składnia > xml) można zaobserwować powtarzające się znaczniki <PropertyDefn>. Definują one kolumny wczytywanych danych:

<Name> – nazwa kolumny w Qgis,

<ElementPath> – ściezka względna względem korzenia w xml,

<Type> – typ danych,

<Width> – szerokość dla danych tekstowych.

Spróbujmy zmodyfikować dane w taki sposób, aby zmienić nazwę kolumny wyświetlaną w QGIS oraz typ danych, które nie wyglądają za dobrze w polu atrybutów. Zmieniamy więc przykładowo atrybuty dla sterowania wczytywania pola o nazwie iip_identyfikator pamiętając że wartość ElementPath musi pozostać niezmienna. Następnie ponownie otwieramy plik gml w Qgis.

Przed zmianami – gfs oryginalny:
<PropertyDefn>
<Name>iip_identyfikator</Name>
<ElementPath>iip_identyfikator</ElementPath>
<Type>Real</Type>
</PropertyDefn>

Wygląd danych w Qgis:

Obraz danych bez zmiany typu danych w QGIS

Po zmianach – gfs zmieniony:

<PropertyDefn>
<Name>id_iip</Name>
<ElementPath>iip_identyfikator</ElementPath>
<Type>Integer</Type>
</PropertyDefn>

Wygląd danych w Qgis:

Obraz kolumny z danymi po zmianie typu danych w QGIS

Tak samo możemy sterować efektem długości kolumny w kolumnach typu tekstowego zmieniając wartość znacznika <Width>.

Można również usunąć jakąś kolumnę we wczytywanych danych usuwając jej definicję w gfs – cały węzeł <PropertyDefn>…….</PropertyDefn>

W zależności od potrzeb za pomocą modyfikacji pliku gfs możemy więc dostosować strukturę wczytywanych z gml danych do potrzeb albo np do narzuconego w xsd typu danych lub przygotować dane do eksportu do shp tak aby pola pozostały nie obcinane przy eksporcie. Przekazując plik gfs przekazujemy też informację jaka kolumna odpowiada jakiej wartości w pliku gml jak i sposób zagnieżdżenia w pliku GML znaczników w przypadku bardziej rozbudowanych plików. Np w przypadku wczytywania danych xml/gml z bdot10k możemy zaobserwować taką ścieżkę <ElementPath>idIIP|BT_Identyfikator|lokalnyId</ElementPath> w pliku gfs. Odpowiada ona zagnieżdzeniu znaczników w xml.

<idIIP>
<BT_Identyfikator>
<lokalnyId>wartość</lokalnyId>
</BT_Identyfikator>
</idIIP>

Oczywiście możemy mieć kilka gfs z różnymi definicjami kolumn w zależności od potrzeb – qgis użyje tego, którego nazwa będzie identyczna jak wczytywany plik gml.

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