Informações OGR - Verificar índice espacial?

9

Se quisermos obter informações sobre uma camada vetorial (shapefile, por exemplo), poderíamos usar ogrinfo:

ogrinfo -so myshapefile.shp mylayer

Isso retorna muitas informações pertinentes sobre o shapefile. É possível retornar se existe ou não um índice espacial? Em caso afirmativo, podemos acessar informações sobre o índice espacial?

Nota: Percebo que é trivial abrir a pasta que contém o shapefile e procurar um .sbn ou .sbx e, portanto, a pergunta é específica para ogrinfo.

Jay Laura
fonte
Eu tenho a mesma pergunta, com ênfase no GeoPackage.
alphabetasoup

Respostas:

4

Como resposta ao comentário de @Richard Law, o nome da tabela rtree virtual que contém o índice espacial no GeoPackage é sempre nomeado de acordo com o modelo rtree_[table_name]_[geometry_column_name]

Portanto, você pode fazer uma consulta SQL que verifique a existência da tabela rtree.

Por exemplo, você pode verificar se a tabela "table1" possui um índice espacial com 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

Nesse caso, os índices espaciais existem. Caso contrário, teria sido "0".

No GeoPackage, uma tabela pode ter apenas um campo de geometria e, portanto, basta fazer uma verificação com apenas "rtree" e o nome da tabela sem saber o nome do campo de geometria como rtree_table1_%.

user30184
fonte
Boa resposta. Estou decepcionado por não haver abstração para isso em diferentes formatos de vetor.
alphabetasoup
Observando a lista de formatos OGR suportados, gdal.org/ogr_formats.html, poucos formatos suportam índice espacial. A maioria dos formatos de banco de dados suporta índices espaciais de forma transparente e é bastante difícil encontrar, por exemplo, no Oracle, se a tabela tiver um índice espacial ou não.
user30184
2

Com o GDAL 2.2.0 , uma das alterações no driver GPKG é:

  • adicione a função SQL HasSpatialIndex (tblname, geomcolname)

Por exemplo:

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

Shows:

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 melhor, selecione de gpkg_geometry_columnspara mostrar informações para todas as colunas de geometria no arquivo:

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

Ogr não usa os arquivos de índice espacial ESRI .sbn, sbx. Ele cria um arquivo .qix que pode conter um índice espacial e / ou um índice de atributo. Você pode criar o .qix via ogrinfo.
Ogr shapefile driver

também encontrei um ticket GDAL mencionando o arquivo .sbn agora é legível. Não tenho certeza do que isso significa.
bilhete # 4719

klewis
fonte
2
"A partir do OGR 1.10, [o driver ESRI Shapefile] também pode usar os arquivos de índice espacial ESRI (.sbn / .sbx)" gdal.org/ogr/drv_shapefile.html
Mike T
@ MikeToews Parece que eu tive uma atualização melhor. Obrigado!
Jay Laura
@JayLaura 1.10 não é liberado ainda, mas estou certo de que os desenvolvedores gostariam de tê-lo testado
Mike T
1
GDAL / OGR 1.10.0 saiu na semana passada: trac.osgeo.org/gdal/wiki/Release/1.10.0-News