Info OGR - Periksa indeks spasial?

9

Jika kita ingin mendapatkan informasi tentang layer vektor (misalnya, shapefile) kita dapat menggunakan ogrinfo:

ogrinfo -so myshapefile.shp mylayer

Ini mengembalikan banyak informasi terkait tentang shapefile. Apakah mungkin untuk mengembalikan apakah ada indeks spasial atau tidak? Jika demikian, dapatkah kita mengakses info tentang indeks spasial?

Catatan: Saya menyadari itu sepele untuk membuka folder yang berisi shapefile dan mencari .sbn atau .sbx dan pertanyaannya khusus untuk ogrinfo.

Jay Laura
sumber
Saya memiliki pertanyaan yang sama, dengan penekanan pada GeoPackage.
alphabetasoup

Jawaban:

4

Sebagai jawaban atas komentar oleh @Richard Law, nama tabel rtree virtual yang berisi indeks spasial di GeoPackage selalu dinamai sesuai dengan templat rtree_[table_name]_[geometry_column_name]

Oleh karena itu Anda dapat membuat kueri SQL yang memeriksa keberadaan tabel rtree.

Misalnya Anda dapat memeriksa apakah tabel "table1" memiliki indeks spasial dengan 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

Dalam hal ini indeks spasial memang ada. Kalau tidak, itu akan menjadi "0".

Dalam GeoPackage sebuah tabel hanya dapat memiliki satu bidang geometri dan oleh karena itu cukup untuk melakukan pemeriksaan hanya dengan "rtree" dan nama tabel tanpa mengetahui nama bidang geometri sebagai rtree_table1_%.

pengguna30184
sumber
Jawaban yang bagus. Saya hanya kecewa karena tidak ada abstraksi untuk ini di berbagai format vektor.
alphabetasoup
Dengan melihat daftar format OGR yang didukung gdal.org/ogr_formats.html beberapa format mendukung indeks spasial sama sekali. Sebagian besar format database mendukung indeks spasial secara transparan dan agak sulit untuk menemukan misalnya dari Oracle jika tabel memiliki indeks spasial atau tidak. Saya kira abstaksi seperti itu tidak akan segera masuk ke GDAL.
user30184
2

Dengan GDAL 2.2.0 , salah satu perubahan pada driver GPKG adalah:

  • tambahkan fungsi SQL HasSpatialIndex (tblname, geomcolname)

Sebagai contoh:

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

Menunjukkan:

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

Atau lebih baik, pilih dari gpkg_geometry_columnsuntuk menampilkan info untuk semua kolom geometri dalam file:

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

Ogr tidak menggunakan file Indeks spasial ESRI .sbn, sbx. Ini menciptakan file .qix yang mungkin berisi indeks spasial dan / atau indeks atribut. Anda dapat membangun .qix melalui ogrinfo.
Ogr shapefile driver

Saya juga menemukan tiket GDAL yang menyebutkan file .sbn sekarang dapat dibaca. Tidak yakin apa maksudnya.
tiket # 4719

Klewis
sumber
2
"Dimulai dengan OGR 1.10, [driver ESRI Shapefile] juga dapat menggunakan file indeks spasial ESRI (.sbn / .sbx)" gdal.org/ogr/drv_shapefile.html
Mike T
@ MikeToews Sepertinya saya memiliki peningkatan yang lebih baik. Terima kasih!
Jay Laura
@JayLaura 1.10 belum dirilis, tapi saya yakin para pengembang akan senang untuk mengujinya
Mike T
1
GDAL / OGR 1.10.0 keluar minggu lalu: trac.osgeo.org/gdal/wiki/Release/1.10.0-News