OGR Info - Vérifier l'index spatial?

9

Si nous voulons obtenir des informations sur une couche vectorielle (fichier de formes par exemple), nous pourrions utiliser ogrinfo:

ogrinfo -so myshapefile.shp mylayer

Cela renvoie beaucoup d'informations pertinentes sur le fichier de formes. Est-il possible de renvoyer s'il existe ou non un indice spatial? Si oui, pouvons-nous accéder à des informations sur l'indice spatial?

Remarque: Je me rends compte qu'il est trivial d'ouvrir le dossier contenant le fichier de formes et de rechercher un .sbn ou .sbx et donc la question est spécifique à ogrinfo.

Jay Laura
la source
J'ai la même question, en mettant l'accent sur GeoPackage.
alphabetasoup

Réponses:

4

En réponse au commentaire de @Richard Law, le nom de la table virtuelle rtree qui contient l'index spatial dans GeoPackage est toujours nommé selon le modèle rtree_[table_name]_[geometry_column_name]

Par conséquent, vous pouvez effectuer une requête SQL qui vérifie l'existence de la table rtree.

Par exemple, vous pouvez vérifier si la table "table1" a un index spatial avec 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

Dans ce cas, l'index spatial existe. Sinon, le aurait été "0".

Dans GeoPackage, une table ne peut avoir qu'un seul champ de géométrie et il suffit donc de faire une vérification en "rtree" et le nom de la table sans connaître le nom du champ de géométrie comme rtree_table1_%.

user30184
la source
Bonne réponse. Je suis juste déçu qu'il n'y ait aucune abstraction pour cela dans différents formats vectoriels.
alphabetasoup
En consultant la liste des formats OGR pris en charge, gdal.org/ogr_formats.html, peu de formats prennent en charge l'index spatial. La plupart des formats de base de données prennent en charge les index spatiaux de manière transparente et il est plutôt difficile de trouver par exemple à partir d'Oracle si la table a un index spatial ou non.
user30184
2

Avec GDAL 2.2.0 , l'une des modifications apportées au pilote GPKG est:

  • ajouter la fonction SQL HasSpatialIndex (tblname, geomcolname)

Par exemple:

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

Montre:

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

Ou mieux, sélectionnez de gpkg_geometry_columnspour afficher les informations de toutes les colonnes de géométrie du fichier:

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

Ogr n'utilise pas les fichiers d'index spatial ESRI .sbn, sbx. Il crée un fichier .qix qui peut contenir un index spatial et / ou un index d'attribut. Vous pouvez créer le .qix via ogrinfo.
Pilote de fichier de formes Ogr

J'ai également trouvé un ticket GDAL mentionnant que le fichier .sbn est maintenant lisible. Je ne sais pas ce que cela signifie.
billet # 4719

klewis
la source
2
"Depuis OGR 1.10, [le pilote ESRI Shapefile] peut également utiliser les fichiers d'index spatial ESRI (.sbn / .sbx)" gdal.org/ogr/drv_shapefile.html
Mike T
@MikeToews On dirait que je ferais mieux de mettre à niveau. Merci!
Jay Laura
@JayLaura 1.10 n'est pas encore sorti, mais je suis certain que les développeurs aimeraient le faire tester
Mike T
1
GDAL / OGR 1.10.0 est sorti la semaine dernière: trac.osgeo.org/gdal/wiki/Release/1.10.0-News