Plik shp – co każdy GISowiec wiedzieć powinien

Specyfikacja pliku shp powstała w firmie ESRI w 1998 roku. Od tego czasu wiele na rynku GIS się zmieniło.

1.Pliki i atrybuty wchodzące w skład formatu SHP

Według specyfikacji powyżej podstawowymi – minimalnymi wymagalnymi plikami wchodzącymi w format shp są pliki o rozszerzeniach:

*.shp – plik z geometrią

*.shx – plik z indeksem

*.dbf – plik z tabelą atrybutów w postaci tabeli dBase

Według ESRI istnieją jeszcze opcjonalne rozszerzenia (źródło) :

*.sbn *.sbx – indeks przestrzenny obiektów

*.atx – index tworzony dla atrybutów dBase przez ArcCatalog

*.ixs *.mxs – indeksy poprawiające geokodowanie

*.prj – informacja o odwzorowaniu

*.xml – plik z metadanymi

Tyle ESRI. Warto wiedzieć, że również niektóre programy dodają od siebie dodatkowe pliki.

Np Qgis generuje min.:

*. qpj – odwzorowanie dla pliku shp

*.qix – własna wersja indeksu przestrzennego,

*.cpg – kodowanie pliku.

2.Typy kolumn

Typy kolumn według specyfikacji z 1998 roku są zgodne z aktualną wtedy specyfikacją DBF. Niestety dbf od 1998 roku nieco się rozwinął. Trzymajmy się więc tego co określiło ESRI – numer, float, character,date.

3. Ograniczenia pliku shp

a) Ograniczenie rozmiaru pliku shp do 2GB, ograniczenie pliku DBF do 2GB – suma plików w shp może przekraczać 2 GB. (źródło) 

b) Daty przechowywane są w shp w postaci yyyy-mm-dd – shp nie przechowuje timestampów (źródło)

c) Inne ograniczenia (źródło):

– maksymalna liczba kolumn to 255 pozostałe będą ignorowane

– wartości typu NULL nie są obsługiwane w pliku shp

– kodowanie dbf to ANSI – Unicode jest dopuszczalne dla aplikacji innych niż ESRI

– nazwy kolumn nie mogą mieć więcej niż 10 znaków i muszą zaczynać się od litery. Nie mogą też zawierać znaków specjalnych poza podkreśleniem.

– maksymalna porcja danych użytych dla definicji kolumn w pliku shp to 4000 bajtów – jeśli przekracza ten rozmiar nie da się np. wyeksportować w FME danych do niektórych formatów np. Mapinfo. Wiele kolumn z definicją string(254) przekroczy ten rozmiar.

– plik dbf musi zawierać co najmniej jedną kolumnę – domyślnie jest to ID

– pliki dbf nie obsługują blob, guid, global ID, coordinate ID i danych rastrowych

– indeksy powinny być odtwarzane w każdym programie po edycji shp.

4.Optymalizacja i tworzenie pliku shp – najczęstsze błędy

Dochodzimy do dość istotnej informacji dla wszystkich tworzących pliki shp na podstawie opublikowanych przez GUGiK schematów XSD. Informacja w schemacie że maksymalny rozmiar pola tekstowego to 254 znaków nie oznacza z automatu, że mamy tworzyć dla danych o szerokości 15 liter pole o szerokości 254 w shp. Zgodnie z zasadami optymalizacji, które stosuje się w zapisach bazodanowych należy tworzyć pola o szerokości maksymalnej danych w nich zawartych. Dodatkowo jeśli pól tekstowych  o rozmiarze 254 będzie dużo, nadziejemy się również na ograniczenie nagłówka 4000 bajtów – co oznacza problem z przetworzeniem tych danych przez użytkowników. Bardzo znacząco wpłynie to też na zwiększenie rozmiaru pliku i prędkość operacji na nim w programach GIS.

Drugim częstym błędem jest używanie tylko stringów jako kolumn shp niezależnie od typu danych – lubują się w tym szczególnie programy polskiego oddziału pewnej amerykańskiej firmy dla której shp nie jest naturalnym środowiskiem działania.

Trzeci błąd to pozwolenie na automatyczne ścinanie nagłówków kolumn w pliku shp wskutek czego np. <ot:x_zrodloDanychG> stanie się x_zrodloDa – należy mapować nazwy kolumn do aliasów nazw dostarczając plik z nazwami pełnymi i zamiennikami. W przypadku importu xml np. z BDOT10k mozna to zrobić  edytując plik gfs tworzony w tym samym katalogu przy wczytaniu gml do Qgis. Na pewno napiszę o tym więcej w związku z problemami niektórych osób ze strukturą danych importowanych z xml/gml.

5. Podsumowanie

W plikach shp wielu producentów wprowadza własne implementacje tego formatu lub dodatkowe pliki nie czytane przez innych. W części nie ma specyfikacji do tych rozszerzeń co utrudnia powstanie wspólnego standardu rozwijającego ten format. Ograniczenia w zapisie plików shp są ignorowane przez niektóre programy co prowadzi do problemów przy przetwarzaniu danych w różnych systemach. Bardzo często osoby tworzące shp nieświadomie nie stosują się do zasad umożliwiających prawidłową wymianę danych między systemami w tym formacie.