Erklären Sie den Unterschied zwischen shx- und shp-Dateien von Shapefile?


11

Ich suche nach einer ausführlicheren Erklärung der Unterschiede in shp- und shx-Dateien ohne Erfolg. Ich meine jenseits von 'shp enthält Geometrie - shx enthält einen Index der Geometrie'.

Der Grund, den ich frage, ist, dass ich während meiner Arbeit in QGIS in letzter Zeit zwei Beobachtungen gemacht habe, die zu Fragen in meinem Kopf über die genauen Unterschiede in diesen Dateierweiterungen geführt haben:

  1. QGIS kann sowohl shx als auch shp öffnen und anzeigen, und jede Datei scheint in ihrer Ausgabe (Anzeige) mehr oder weniger identisch zu sein.
  2. aber nicht genau so - mir ist aufgefallen, dass die passenden shx / shp-Dateien manchmal im Verhältnis zueinander etwas "aus dem Lot" angezeigt werden. Es scheint kein Projektionsproblem zu sein, sie zeichnen einfach nicht genau an der gleichen Stelle.

Diese Beobachtungen haben mich neugierig gemacht, warum diese Unterschiede in der Anzeige bestehen und warum QGIS das shx auf die gleiche Weise wie das shp öffnen und bedienen kann, obwohl ich vorher verstanden habe, dass das shp die 'Master'-Datei ist, wenn Sie so wollen, aber erfordert, dass .dbf und .shx als einzelne, ganze Entität korrekt funktionieren.



2
Schauen Sie sich GeospatialPython.com
Gen

Antworten:


18

Die endgültige Referenz zum Shapefile-Format ist die technische Beschreibung des ESRI-Shapefiles .

Es ist irreführend, das shxals "Index" zu bezeichnen. Stattdessen handelt es sich um die Offsetdatei für den direkten Zugriff. Es gibt keine Daten in der shx, nur einen Klon der ersten hundert Bytes und der Datensatznummer und einen Versatz zum Startbyte dieses Datensatzes in der shp. Der einzige Ort für Attribute ist der dbf(der eigenständig ist - trotz "Wissen" im Gegenteil, das shxbindet das nicht shpund dbfnur die Datensatznummer macht das).

Es ist möglich , Shape - Dateien zu haben „Lücken“ in dem shpden die machen shxunverzichtbar, aber in der Praxis Esri Tools werden die gesamte neu zu schreiben shpund shxso , dass jede Lücke durch Bearbeiten von Datensatz erstellt wird entfernt. In den meisten Fällen ist es möglich, den shxInhalt wiederherzustellen, wenn er verloren geht. das Gleiche gilt nicht für das shpoder dbf.

Die Benennung von shpund shxist ein Artefakt des VFILEDirektzugriffsmoduls mit variabler Breite des PrImeOS-Betriebssystems, das zuerst von Esri auf Unix, VAX / VMS, Data General und IBM und dann auf Microsoft Windows portiert wurde. Das sbn/ sbxräumliche Indexpaar hat dieselbe Namenskonvention (obwohl diese nicht in der Shapefile-Spezifikation dokumentiert sind). In der ursprünglichen VFILEFORTRAN-Bibliothek wurde nur die Basisdatei benannt, und die Offsetdatei mit einem xTerminalzeichen wurde gerade bei der Dateierstellung angezeigt.


1
Und später: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.Logischerweise ist es analog zu Datenbankindizes a data structure that improves the speed of data retrieval operations.
user30184

2
Nein, das shxist absolut kein räumlicher Index.
Vince

1
Die shxtatsächlich verlangsamt seriellen Zugriff (mehr I / O), aber es hat einen direkten Zugang machen möglich , was eine Verbesserung in Betracht gezogen werden könnte.
Vince

1
"..., nur ein Klon der ersten hundert Bytes und Datensatznummer und ..." . „... die SHX nicht die shp und dbf nicht binden, nur Rekordzahl macht die“ . Zuerst sagen Sie, dass die Datensatznummer innerhalb von .shx liegt. Später sagen Sie, .shx verbindet nicht .shp und .dbf, aber diese 'Datensatznummer'. Wenn 'Datensatznummer' die beiden genannten Formate verbindet und Teil von .shx ist, warum kann dann nicht gesagt werden, dass .shx .shp und .dbf verbindet? Es ist für mich verwirrend, diesen Teil Ihrer Antwort. Könntest Du das erläutern? Tks.
Andre Silva

2
Die Datensatznummer ist in beiden shpund vorhanden shx. Es ist nicht im dbfnur dem impliziten Byte-Offset vom Ende der Header-Datensätze (40 Bytes für die Tabelle, die eine Feldanzahl enthält, und 40 zusätzlichen Bytes für jedes Feld) mal der Datensatzgröße vorhanden. Ich habe Shapefile-Leser und -Schreiber sowohl in 'C' als auch in Java geschrieben, und es ist die Schleifenzählervariable des Programms, die das shp/ shxmit dem verknüpft dbf. Das ermöglicht shxdie Verknüpfung der Datensatznummer durch Versatz mit einer Recno-Integritätsprüfung mit dem Beginn des shpDatensatzes, nicht mehr.
Vince

12

Shx hat auf einer Karte sicherlich nichts zu zeigen, wie Sie der Spezifikation https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf entnehmen können .

Sie haben in der Tat Recht, dass es möglich ist, Shapefile zu öffnen, indem Sie den .shx-Teil mit QGIS 3.0.3 auswählen, aber ich kann keinen Unterschied in der Position feststellen. Ich glaube, dass Shapefile immer noch auf demselben Weg geöffnet wird und das Ergebnis dasselbe ist. Wenn Sie einen Testfall für die Reproduktion des Problems der unterschiedlichen Platzierung der Geometrien erstellen können, erstellen Sie bitte ein QGIS-Ticket zu diesem Problem.

Wenn Sie den .shp-Teil löschen, sehen Sie, dass QGIS .shx nicht alleine öffnet.


Mein Fehler, ich habe die gleichen Dateien erneut überprüft und es war in der Tat eine nicht übereinstimmende Projektion. Als ich diese neu ausrichtete, reihten sich die shx- und shp-Versionen derselben Ebene aneinander und waren wie erwartet identisch. Interessanterweise ermöglicht QGIS, dass sowohl .shx als auch .shp in dasselbe Projekt hochgeladen werden, und sie zeigen ihren eigenen Quellpfad an, aber wie von anderen hervorgehoben, entspricht die Ausgabe genau den gleichen Geometrien, da es sich tatsächlich um dieselbe Datei handelt.
Maggie

2

.shxist der Index für eine .shpDatei.

Sie benötigen beide, um die .shpDatei öffnen zu können . Wenn Sie eine .shxDatei in QGIS öffnen , wird die .shpDatei geöffnet . Wenn sie ausgeschaltet sind, liegt ein Projektionsproblem vor.

Ein ShapeFile benötigt drei Komponenten:

  1. .shp - speichert die Geometrie
  2. .shx - speichert den Index
  3. .dbf - speichert die Attribute

In der .prjRegel wird eine Datei empfohlen, in der die Projektionsinformationen gespeichert sind. Es können andere Dateien mit einer ShapeFile verknüpft sein, diese werden jedoch nicht unbedingt benötigt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.