Wyjaśniasz różnicę między plikami shx i shp pliku shapefile?

11

Poszukuję bardziej szczegółowego wyjaśnienia różnic w plikach shp i shx, ale bezskutecznie. Mam na myśli poza „shp zawiera geometrię - shx zawiera indeks geometrii”.

Powodem, dla którego pytam, jest to, że podczas niedawnej pracy w QGIS poczyniłem dwie spostrzeżenia, które doprowadziły do ​​moich pytań dotyczących dokładnych różnic w tych rozmiarach plików:

  1. QGIS może otwierać i wyświetlać zarówno shx, jak i shp, a każdy plik wydaje się być mniej więcej identyczny pod względem wyników (wyświetlania),
  2. ale nie do końca tak - zauważyłem, że czasami pasujące pliki shx / shp wyświetlają się nieco „nieprzyzwoicie” względem siebie. Wydaje się, że nie jest to problem z projekcją, po prostu nie rysują się dokładnie w tym samym miejscu.

Te obserwacje zainteresowały mnie, dlaczego istnieją te różnice w wyświetlaniu i dlaczego QGIS może otwierać i obsługiwać shx w taki sam sposób jak shp, kiedy wcześniej rozumiałem, że shp jest plikiem głównym, jeśli chcesz, ale wymaga .dbf i .shx do poprawnego działania jako pojedynczego, całego bytu.

Maggie
źródło

Odpowiedzi:

19

Ostatecznym odniesieniem do formatu pliku shapefile jest opis techniczny pliku shapefile ESRI .

Opisywanie tego shxjako „indeksu” jest mylące . Zamiast tego jest to plik przesunięcia bezpośredniego dostępu. Brak danych w shx, tylko klon pierwszej setki bajtów i numeru rekordu i przesunięty do bajtu początkowego tego rekordu w shp. Jedyną lokalizacją dla atrybutów jest dbf(która jest samodzielna - pomimo „wiedzy” wręcz przeciwnie, shxnie wiąże shpi dbftylko numer rekordu to robi).

Możliwe jest, że pliki kształtu mają „luki” w tym, shpco czyni je shxniezbędnymi, ale w praktyce narzędzia Esri przepisują całość shpi shxusuwają wszelkie luki utworzone przez edycję rekordów. W większości warunków można odzyskać shxzawartość, jeśli zaginie; tego samego nie można powiedzieć o shplub dbf.

Nazewnictwo shpi shxjest artefaktem VFILEmodułu bezpośredniego dostępu o zmiennej szerokości systemu operacyjnego PrImeOS, najpierw przeniesionego przez Esri do Unix, VAX / VMS, Data General i IBM, a następnie do Microsoft Windows. sbn/ sbxPrzestrzennych akcji pary indeks sama konwencja nazewnictwa (chociaż takie nie są opisane w opisie Shapefile). W oryginalnej VFILEbibliotece FORTRAN nazwano tylko plik podstawowy, a plik przesunięcia ze xznakiem terminalu pojawił się właśnie podczas tworzenia pliku.

Vince
źródło
1
A później: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.Logicznie jest to analogiczne do indeksów baz danych a data structure that improves the speed of data retrieval operations.
user30184
2
Nie, shxabsolutnie nie jest to indeks przestrzenny.
Vince
1
shxFaktycznie spowalnia dostęp szeregowy (więcej I / O), ale robi bezpośredni dostęp możliwy , które mogłyby zostać uznane poprawa.
Vince
1
„... tylko klon z pierwszych stu bajtów i rekordowej liczby i…” . „... shx nie wiąże shp i dbf, robi to tylko numer rekordu . Najpierw powiesz, że „numer rekordu” znajduje się w .shx. Później mówisz, że .shx nie wiąże .shp i .dbf, ale robi to ten „numer rekordu”. Jeśli „numer rekordu” łączy dwa cytowane formaty i jest częścią .shx, to dlaczego nie można powiedzieć, że .shx wiąże .shp i .dbf? Ta część twojej odpowiedzi jest dla mnie myląca. Możesz wyjaśnić? Tks.
Andre Silva,
2
Numer rekordu jest obecny zarówno w, jak shpi shx. To nie występuje w dbftylko implicite bajt przesunięcie od końca zapisów nagłówków (40 bajtów dla tabeli, która zawiera liczbę pól, a 40 dodatkowych bajtów dla każdego pola) razy większy rekord. Napisałem czytniki i zapisy plików kształtu w „C” i Javie, i jest to zmienna licznika pętli programu, która łączy shp/ shxz dbf. shxZapewnia powiązanie numeru rekordu, przez przesunięcie z kontroli integralności recNo, do rozpoczęcia shpnagrywania, nic więcej.
Vince
12

Shx z pewnością nie ma nic do pokazania na samej mapie, jak można przeczytać w specyfikacji https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

Rzeczywiście masz rację, że można otworzyć plik shapefile, wybierając część .shx w QGIS 3.0.3, ale nie widzę żadnej różnicy w lokalizacji. Uważam, że plik kształtu jest nadal otwierany tą samą ścieżką, a wynik jest taki sam. Jeśli możesz zrobić przypadek testowy do odtworzenia problemu innego umiejscowienia geometrii, utwórz zgłoszenie QGIS dotyczące tego problemu.

Jeśli usuniesz część .shp, zobaczysz, że QGIS nie otwiera się tylko .shx.

użytkownik30184
źródło
Mój błąd, ponownie sprawdziłem te same pliki i rzeczywiście była to niedopasowana projekcja. Kiedy je wyrównałem, wersje shx i shp tej samej warstwy ustawiły się w szeregu i były identyczne jak oczekiwano. Co ciekawe, QGIS pozwala na przesłanie zarówno .shx, jak i .shp do tego samego projektu, i wyświetlają one swoją własną ścieżkę źródłową, ale jak zauważyli inni, dane wyjściowe mają dokładnie taką samą geometrię, ponieważ są to rzeczywiście ten sam plik.
Maggie,
2

.shxjest indeksem .shppliku.

Musisz mieć oba te elementy, aby móc otworzyć .shpplik. Jeśli otworzysz .shxplik w QGIS, .shpplik zostanie otwarty . Jeśli są wyłączone, występuje problem z projekcją.

ShapeFile potrzebuje trzech komponentów:

  1. .shp - przechowuje geometrię
  2. .shx - przechowuje indeks
  3. .dbf - przechowuje atrybuty

.prjPlik jest zwykle zalecane, która przechowuje informacje projekcji. Mogą istnieć inne pliki związane z ShapeFile, ale nie są one absolutnie potrzebne.

HeikkiVesanto
źródło