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.