ESRI(r) ShapeFile

Ermöglicht den Zugriff auf Dateien gemäß der ESRI© Shapefile Spezifikation.

Abfragen mittels GeoSQL sind möglich.

Es werden alle Geometrietypen mit Ausnahme von ShapeTypeMultiPatch unterstützt.

Argumente

Typname: shapeFile

  • fileName: Der Name der Datei, absolut oder relativ, mit oder ohne Dateierweiterung

  • epsgCode (-1): Epsg-Code der Daten, wenn nicht definiert, dann wird eine automatische Ermittlung aus der Bounding-Box versucht

  • style|cssFile: hier immer vom Typ Vektor CSS.

  • geomColumnName (ShapeGeometry): Name, wie die Geometrie-Spalte benannt werden soll.

Ladevorgang

Beim Laden werden die .shp, die .shx und die .dbf Dateien geöffnet und deren Header werden ausgewertet.

Die Attribut-Spalten ergeben sich aus der dbf Datei, doppelte Spaltennamen werden eindeutig gemacht. Zusätzlich werden immer die internen Spalten:

  • ShapeRowId (Zeilennummer)
  • ShapeGeometry (Geometrie)

angefügt und stehen neben den in der DBF definierten für Abfragen und nat. Kartendarstellung zur Verfügung.

Beispiel

{
"anyShape": {
    "type": "Shapefile",
    "fileName": "d:\\temp\\bsp.shp"
  }
}

Implementierungsdetails

Im Hauptspeicher werden die Informationen zum Index jedes Shape-Records vorgehalten. Die beteiligten Dateien werden nach dem Initialisierungsvorgang wieder geschlossen und bei jedem Datenabruf neu geöffnet.

Eine "Shapedatei" besteht mindestens aus 3 Dateien, die Namen sind dabei identisch und unterscheiden sich in der Dateierweiterung. Vorhanden sein muss:

  • .shp
  • .dbf
  • .shx

Bei der Länge des Dateinamen gibt es keine Einschränkungen. Beim Ladevorgang wird das letzte Dateidatum der shp, shx und dbf gemerkt. Bei folgenden Aufrufen wird dieser erneut ermittelt und bei einer Abweichung eine Fehler gemeldet, die Ebene muss dann neu geladen werden.

Bekannte Einschränkungen:

  • das Geometrieformat ShapeTypeMultiPatch wird nicht unterstützt
  • die .cpg-Datei (CodePage) der DBF Dateien wird nicht ausgewertet (Umsetzung geplant)
  • die .prj-Datei wird nicht ausgewertet
  • keine Links und Memo-Dateien der DBF

NULL-Behandlung:

  • Date, wenn Speicherformat: 8 bytes - date stored as a string in the format YYYYMMDD, wird NULL, wenn: 8 Leereichen oder 8x die Ziffer 0

  • Double, wenn Speicherformat *Number stored as a string, right justified, and padded with blanks to the width of the field. *, wird null wenn nur Leerezeichen gespeichert sind, oder bei -nan(ind), nan(ind), -nan, nan, inf, -inf.

"Komplexe-Polygone"

Es gibt ab Version 7.6 eine Einschätzung, ob komplexe Polygone enthalten sind und darauf hin eine Optimierung der Zeichenvorgänge.

Komplex definiert sich hier:

  • Es ist mindestens ein Datensatz vom Typ Polygon vorhanden der mehr als 2 Parts hat und ingesamt mehr als 5000 Stüzpunkte.

In dem Fall wird beim Zeichnen eine Optimierung durchgeführt.

Dabei wird die Geometrie für Zeichenoperationen präprozessiert und in einer Cache-Tabelle zwischengespeichert.

Da im Shape-File keine exakte Definition für Multipolygone gegeben ist, wird beim Lesen der Geometrie ein Verfahren verwendet, welches versucht die Polygon-Ringe in Löcher und Multipolygone zu trennen. Dieser Vorgang ist u.U. recht zeitintensiv.

Es erfolgt dabei zudem eine Vereinfachung (Simplify, 1m) und eine Reprojektion (wenn erforderlich).

Die Cache-Daten werden im globalen Temp-Verzeichnis im Unterordner shpCtx gespeichert. Beim Entladen der Ebenen wird diese Datei gelöscht. Es existiert eine Cache-Datei pro Shape.

Der Cache wird im Hintergrund erstellt. Bei der ersten Anforderung wird max. 500ms gewartet, bei folgenden dann 250ms. Die Zeichenanforderung wird solange mit den Originaldaten ausgeführt. D.h. je nach Größe der Datei stellt der Effekt sich erst nach einigen (wenigen) Zeichenaktionen ein.

Beispieldatei: 2 Datensätze

  • Polygon 1 8400 Parts, 300.000 Stützpunkte
  • Polygon 2 1820 Parts, 130.000 Stützpunkte
Zoom Zeichendauer Zeichendauer 1. Req. Optimiert Präprozessing
25% 550 ms 1200 ms 30 ms 1400 ms
10% *1 550 ms 1100 ms 90 ms 1000 ms

*1) Bei 10% erfolgt keine Simplify der Geometrie


Zuletzt geändert: 13.11.2022 19:31:00 (erstmals erstellt 26.03.2017)