¿Busca en la geodatabase la clase de entidad o tabla por su nombre?


10

Estoy buscando una manera de buscar Geodatabases para una Clase de entidad o Tabla usando su nombre.

¿Hay alguna función como esta disponible?

Obviamente, la búsqueda de Windows solo devuelve los ID aleatorios de las tablas dentro de una Geodatabase. Me gustaría buscar conjuntos de datos dentro de ellos.

Creo que esto ayudaría a mucha gente, porque sé que no soy el único que almacena datos espaciales en geodatabases, solo para archivarlos con miles de otros conjuntos de datos y no quiero examinarlos.

Me gustaría buscar estas geodatabases en ArcCatalog.


Respuestas:


4

Esta es una larga forma de hacer lo que está pidiendo, usando algo de python:

  1. Necesita una lista de todas las bases de datos geográficas que desea buscar. Si hay muchos, use la función de caminar de Python en el directorio en cuestión. Aislar para cualquier carpeta con un .gdben ellas o .mdb, dependiendo de la base de datos.

  2. Encuentre todos los conjuntos de datos dentro de la GeoDatabase.

  3. Encuentra todas las capas dentro del conjunto de datos.

  4. Busque resultados de capas para lo que está buscando.

Aquí hay una muestra de código de lo que estoy hablando:

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    

44
No todas las clases de entidad están en conjuntos de datos de entidad (la mejor práctica resultaría en muy pocas)
Vince

10

Otra forma de buscar clases de entidad, que pueden o no estar en un conjunto de datos es usar la walkfunción , como se mencionó anteriormente. Solo requiere un espacio de trabajo para buscar (es decir, una carpeta que contenga cientos de GDB).

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))

La lista resultante contendrá las rutas y los nombres de archivo de todas las clases de entidad que coincidan con sus criterios de búsqueda, que se pueden imprimir.

for fc in feature_classes:
     print fc

La walkfunción también se puede modificar para buscar tipos específicos de entidades (es decir, polígonos, puntos, rásteres, etc.) cambiando type=""al tipo de entidad.


1

Me encontré con un software hace un tiempo que puede ser útil para indexar GeoDatabases y otros datos espaciales:

https://www.voyagersearch.com/

Lo probé para nuestra empresa y, aunque no terminamos usándolo por varias razones, tiene muchas funcionalidades útiles. En resumen, crea un índice de sus conjuntos de datos espaciales que luego se puede buscar utilizando la ubicación, ya que registra la extensión de los datos, el nombre y también (creo) los atributos / contenidos de los datos.

Estos son los índices de GeoDB: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geodatabases-and-Shapefiles

¡Esta es su página de demostración que hará un mejor trabajo al demostrar sus capacidades que yo! http://voyagerdemo.com/web/navigo/#/home

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.