Procurando por Geodatabase por Feature Feature ou Table por seu nome?


10

Estou procurando uma maneira de pesquisar bancos de dados geográficos para uma classe ou tabela de recursos usando seu nome.

Existe alguma função como esta disponível?

Obviamente, o Windows Search retorna apenas os IDs aleatórios das tabelas em um Geodatabase. Eu realmente gostaria de procurar conjuntos de dados dentro deles.

Acho que isso ajudaria muitas pessoas, porque sei que não sou o único por aí que armazena dados espaciais em Geodatabases, apenas para arquivá-los com milhares de outros conjuntos de dados e não quero analisá-los.

Eu gostaria de pesquisar esses Geodatabases no ArcCatalog.


Respostas:


4

Este é um longo caminho para fazer o que você está perguntando, usando algum python:

  1. Você precisa de uma lista de todos os bancos de dados geográficos que deseja pesquisar. Se houver muito, use a função walk do python no diretório em questão. Isolar para todas as pastas com um n .gdbou .mdb, dependendo do banco de dados.

  2. Encontre todos os conjuntos de dados no GeoDatabase.

  3. Encontre todas as camadas no conjunto de dados.

  4. Pesquise os resultados das camadas pelo que você está procurando.

Aqui está um exemplo de código do que estou falando:

import arcpy
from arcpy import env
x = 'File Name That You Are Looking For'
GDBs = ['GeoDatabase1', 'GeoDatabase2', 'ect']  # Your list of GeoDatabases
for GDB in GDBs:                                # Iterate through your list
    env.workspace = GDB
    GDBds = arcpy.ListDatasets()                # Find datasets in GeoDatabase
    for ds in GDBds:                            # Iterate through datasets
        env.workspace = GDB + '/' + ds
        fc = arcpy.ListFeatureClasses()         # Find all data in the dataset
        for f in fc:
            if f.find(x) != -1:
                print GDB + '/' + ds + '/' + f    

4
Nem todas as classes de recurso estão em conjuntos de dados de recursos (melhor prática resultaria em muito poucos)
Vince

10

Outra maneira de procurar classes de recurso, que podem ou não estar em um conjunto de dados, é usar a walkfunção , como mencionado anteriormente. Requer apenas um espaço de trabalho para pesquisar (ou seja, uma pasta contendo centenas de GDBs).

import arcpy, os
workspace = "Path/to/folder"
search = "name_string_you_are_searching_for"
feature_classes = []
for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,
                                                  datatype="FeatureClass",
                                                  type="ANY"):
    for fname in filenames:
        # search for string in string to eliminate the need for exact filenames
        if search.upper() in fname.upper():
            feature_classes.append(os.path.join(dirpath, fname))

A lista resultante conterá os caminhos e nomes de arquivos de todas as classes de recursos que correspondem aos seus critérios de pesquisa, que podem ser impressos.

for fc in feature_classes:
     print fc

A walkfunção também pode ser modificada para procurar tipos específicos de recursos (por exemplo, polígonos, pontos, rasters etc.), alterando type=""para o tipo de recurso.


1

Encontrei algum software há algum tempo que pode ser útil para indexar bancos de dados geográficos e outros dados espaciais:

https://www.voyagersearch.com/

Testei-o para a nossa empresa e, embora não o tenhamos usado por vários motivos, ele possui muitas funcionalidades úteis. Em resumo, ele cria um índice dos seus conjuntos de dados espaciais que podem ser pesquisados ​​usando a localização - pois registra a extensão dos dados, o nome e também (eu acho) os atributos / conteúdos dos dados.

Estes são os índices do GeoDB: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geodatabases-and-Shapefiles

Esta é a página de demonstração deles, que fará um trabalho melhor em demonstrar suas capacidades do que eu! http://voyagerdemo.com/web/navigo/#/home

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.