ベクターレイヤー(シェープファイルなど)に関する情報を取得する場合は、ogrinfoを使用できます。
ogrinfo -so myshapefile.shp mylayer
これにより、シェープファイルに関する多くの関連情報が返されます。空間インデックスが存在するかどうかを返すことはできますか?もしそうなら、空間インデックスに関する情報にアクセスできますか?
注:シェープファイルを含むフォルダーを開いて.sbnまたは.sbxを探すのは簡単なことなので、質問はogrinfoに固有です。
ベクターレイヤー(シェープファイルなど)に関する情報を取得する場合は、ogrinfoを使用できます。
ogrinfo -so myshapefile.shp mylayer
これにより、シェープファイルに関する多くの関連情報が返されます。空間インデックスが存在するかどうかを返すことはできますか?もしそうなら、空間インデックスに関する情報にアクセスできますか?
注:シェープファイルを含むフォルダーを開いて.sbnまたは.sbxを探すのは簡単なことなので、質問はogrinfoに固有です。
回答:
@Richard Lawによるコメントへの回答として、GeoPackageの空間インデックスを含む仮想rtreeテーブルの名前は、常にテンプレートに従って命名されます
rtree_[table_name]_[geometry_column_name]
したがって、rtreeテーブルの存在をチェックするSQLクエリを作成できます。
たとえば、テーブル「table1」にogrinfoで空間インデックスがあるかどうかを確認できます
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
この場合、空間インデックスは存在します。それ以外の場合は「0」になります。
GeoPackageでは、テーブルに含めることができるジオメトリフィールドは1つだけなので、ジオメトリフィールドの名前がであることがわからなくても、「rtree」とテーブル名だけでチェックするだけで十分rtree_table1_%
です。
でGDAL 2.2.0、GPKGドライバへの変更の一つは次のとおりです。
例えば:
ogrinfo -sql "SELECT HasSpatialIndex('some_layer', 'geom')" some-file.gpkg
ショー:
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
またはgpkg_geometry_columns
、ファイルからすべてのジオメトリ列の情報を表示するように選択します。
ogrinfo -sql "SELECT table_name, column_name, HasSpatialIndex(table_name, column_name) FROM gpkg_geometry_columns" some-file.gpkg
Ogrは、ESRI空間インデックスファイル.sbn、sbxを使用しません。これは、空間インデックスや属性インデックスを含むことができる.qixファイルを作成します。ogrinfoを使用して.qixをビルドできます。
Ogrシェープファイルドライバー
.sbnファイルについて言及しているGDALチケットも読み取り可能になりました。これが何を意味するのかわかりません。
チケット#4719