Información de OGR - ¿Verifica el índice espacial?

9

Si queremos obtener información sobre una capa vectorial (por ejemplo, un shapefile) podríamos usar ogrinfo:

ogrinfo -so myshapefile.shp mylayer

Esto devuelve mucha información pertinente sobre el archivo de forma. ¿Es posible devolver si existe o no un índice espacial? Si es así, ¿podemos acceder a información sobre el índice espacial?

Nota: Me doy cuenta de que es trivial abrir la carpeta que contiene el archivo de forma y buscar un .sbn o .sbx, por lo que la pregunta es específica de ogrinfo.

Jay Laura
fuente
Tengo la misma pregunta, con énfasis en GeoPackage.
alphabetasoup

Respuestas:

4

Como respuesta al comentario de @Richard Law, el nombre de la tabla de árbol virtual que contiene el índice espacial en GeoPackage siempre se nombra de acuerdo con la plantilla rtree_[table_name]_[geometry_column_name]

Por lo tanto, puede realizar una consulta SQL que verifique la existencia de la tabla rtree.

Por ejemplo, puede verificar si la tabla "tabla1" tiene un índice espacial con 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

En este caso el indes espacial existe. De lo contrario, habría sido "0".

En GeoPackage, una tabla solo puede tener un campo de geometría y, por lo tanto, es suficiente hacer una verificación simplemente con "rtree" y el nombre de la tabla sin conocer el nombre del campo de geometría rtree_table1_%.

usuario30184
fuente
Buena respuesta. Solo estoy decepcionado de que no haya abstracción para esto en diferentes formatos de vectores.
alphabetasoup
Al mirar la lista de formatos OGR admitidos, gdal.org/ogr_formats.html, muy pocos formatos admiten el índice espacial. La mayoría de los formatos de bases de datos admiten índices espaciales de forma transparente y es bastante difícil de encontrar, por ejemplo, de Oracle si la tabla tiene un índice espacial o no. Supongo que esa abstacción no llegará a GDAL pronto.
user30184
2

Con GDAL 2.2.0 , uno de los cambios en el controlador GPKG es:

  • agregar la función SQL HasSpatialIndex (tblname, geomcolname)

Por ejemplo:

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

Muestra:

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

O mejor, seleccione gpkg_geometry_columnspara mostrar información para todas las columnas de geometría en el archivo:

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

Ogr no utiliza los archivos de índice espacial ESRI .sbn, sbx. Crea un archivo .qix que puede contener un índice espacial y / o un índice de atributo. Puede construir el .qix a través de ogrinfo.
Ogr controlador de archivos de forma

También encontré un ticket GDAL que mencionaba que el archivo .sbn ahora es legible. No estoy seguro que significa esto.
boleto # 4719

klewis
fuente
2
"Comenzando con OGR 1.10, [el controlador ESRI Shapefile] también puede usar los archivos de índice espacial ESRI (.sbn / .sbx)" gdal.org/ogr/drv_shapefile.html
Mike T
@MikeToews Parece que tengo una mejor actualización. ¡Gracias!
Jay Laura
@JayLaura 1.10 aún no se ha lanzado, pero estoy seguro de que a los desarrolladores les encantaría probarlo
Mike T
1
GDAL / OGR 1.10.0 salió la semana pasada: trac.osgeo.org/gdal/wiki/Release/1.10.0-News