OGR Info - Auf räumlichen Index prüfen?

9

Wenn wir Informationen über eine Vektorebene (z. B. Shapefile) erhalten möchten, können wir ogrinfo verwenden:

ogrinfo -so myshapefile.shp mylayer

Dies gibt viele relevante Informationen über das Shapefile zurück. Kann zurückgegeben werden, ob ein räumlicher Index vorhanden ist oder nicht? Wenn ja, können wir auf Informationen über den räumlichen Index zugreifen?

Hinweis: Mir ist klar, dass es trivial ist, den Ordner mit dem Shapefile zu öffnen und nach einer .sbn- oder .sbx-Datei zu suchen. Daher ist die Frage spezifisch für ogrinfo.

Jay Laura
quelle
Ich habe die gleiche Frage mit dem Schwerpunkt auf GeoPackage.
Alphabetasoup

Antworten:

4

Als Antwort auf den Kommentar von @Richard Law wird der Name der virtuellen rtree-Tabelle, die den räumlichen Index in GeoPackage enthält, immer nach Vorlage benannt rtree_[table_name]_[geometry_column_name]

Daher können Sie eine SQL-Abfrage durchführen, die das Vorhandensein der Tabelle rtree überprüft.

Mit ogrinfo können Sie beispielsweise überprüfen, ob die Tabelle "table1" einen räumlichen Index hat

ogrinfo -sql "SELECT EXISTS(SELECT 1 FROM sqlite_master WHERE tbl_name like 'rtree_table1_%') as has_spatial_index" mygeopackage.gpkg


INFO: Open of `mygeopackage.gpkg'
      using driver `GPKG' successful.

Layer name: SELECT
Geometry: None
Feature Count: 1
Layer SRS WKT:
(unknown)
has_spatial_index: Integer (0.0)
OGRFeature(SELECT):0
  has_spatial_index (Integer) = 1

In diesem Fall existieren die räumlichen Indes. Sonst wäre das "0" gewesen.

In GeoPackage kann eine Tabelle nur ein Geometriefeld haben. Daher reicht es aus, eine Überprüfung nur mit "rtree" und dem Namen der Tabelle durchzuführen, ohne den Namen des Geometriefelds als zu kennen rtree_table1_%.

user30184
quelle
Gute Antwort. Ich bin nur enttäuscht, dass es dafür keine Abstraktion über verschiedene Vektorformate gibt.
Alphabetasoup
Wenn Sie sich die Liste der unterstützten OGR-Formate ansehen, unterstützen gdal.org/ogr_formats.html nur wenige Formate den räumlichen Index. Die meisten Datenbankformate unterstützen räumliche Indizes transparent und es ist beispielsweise bei Oracle ziemlich schwer zu finden, ob die Tabelle einen räumlichen Index hat oder nicht. Ich vermute, dass eine solche Abstinenz nicht bald in GDAL landen wird.
user30184
2

Mit GDAL 2.2.0 ist eine der Änderungen am GPKG-Treiber:

  • Fügen Sie die SQL-Funktion HasSpatialIndex (tblname, geomcolname) hinzu

Zum Beispiel:

ogrinfo -sql "SELECT HasSpatialIndex('some_layer', 'geom')" some-file.gpkg

Zeigt an:

INFO: Open of `some-file.gpkg'
      using driver `GPKG' successful.

Layer name: SELECT
Geometry: Unknown (any)
Feature Count: 1
Layer SRS WKT:
(unknown)
HasSpatialIndex: Integer (0.0)
OGRFeature(SELECT):0
  HasSpatialIndex (Integer) = 1

Oder wählen Sie besser aus gpkg_geometry_columns, um Informationen für alle Geometriespalten in der Datei anzuzeigen:

ogrinfo -sql "SELECT table_name, column_name, HasSpatialIndex(table_name, column_name) FROM gpkg_geometry_columns" some-file.gpkg
Mike T.
quelle
1

Ogr verwendet die räumlichen ESRI-Indexdateien .sbn, sbx nicht. Es wird eine .qix-Datei erstellt, die einen räumlichen Index und / oder einen Attributindex enthalten kann. Sie können die .qix über ogrinfo erstellen.
Ogr Shapefile-Treiber

Ich habe auch ein GDAL-Ticket gefunden, in dem erwähnt wird, dass die .sbn-Datei jetzt lesbar ist. Ich bin mir nicht sicher, was das bedeutet.
Ticket # 4719

klewis
quelle
2
"Ab OGR 1.10 kann [der ESRI-Shapefile-Treiber] auch die räumlichen ESRI-Indexdateien (.sbn / .sbx) verwenden." Gdal.org/ogr/drv_shapefile.html
Mike T
@ MikeToews Sieht so aus, als hätte ich ein besseres Upgrade. Vielen Dank!
Jay Laura
@ JayLaura 1.10 ist noch nicht veröffentlicht, aber ich bin sicher, die Entwickler würden es gerne testen lassen
Mike T
1
GDAL / OGR 1.10.0 erschien letzte Woche: trac.osgeo.org/gdal/wiki/Release/1.10.0-News