Stai cercando un geodatabase per classe o tabella di caratteristiche in base al nome?


10

Sto cercando un modo per cercare nei database geografici una classe o una tabella di caratteristiche usando il suo nome.

C'è qualche funzione come questa disponibile?

Ovviamente la ricerca di Windows restituisce solo gli ID casuali per le tabelle all'interno di un Geodatabase. Vorrei davvero cercare set di dati al loro interno.

Penso che questo aiuterebbe molte persone, perché so di non essere il solo là fuori che memorizza i dati spaziali nei Geodatabase, solo per archiviarli con un migliaio di altri set di dati e non voglio setacciarli.

Mi piacerebbe cercare questi geodatabase all'interno di ArcCatalog.


Risposte:


4

Questo è un lungo modo di fare quello che stai chiedendo, usando un po 'di pitone:

  1. È necessario un elenco di tutti i database geografici che si desidera cercare. Se ce ne sono molti, usa la funzione walk di python nella directory in questione. Isolare per tutte le cartelle con una .gdbin loro o .mdb, a seconda del database.

  2. Trova tutti i set di dati nel GeoDatabase.

  3. Trova tutti i livelli nel set di dati.

  4. Cerca i risultati dai livelli per quello che stai cercando.

Ecco un esempio di codice di ciò di cui sto parlando:

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
Non tutte le classi di entità geografiche sono presenti nei set di dati delle caratteristiche (le migliori pratiche ne porterebbero pochissime)
Vince il

10

Un altro modo per cercare le classi di feature, che possono o meno essere presenti in un set di dati, è utilizzare la walkfunzione , come menzionato in precedenza. Richiede solo uno spazio di lavoro in cui cercare (ovvero una cartella contenente centinaia di 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))

L'elenco risultante conterrà i percorsi e i nomi dei file di tutte le classi di caratteristiche che corrispondono ai criteri di ricerca, che possono essere stampati.

for fc in feature_classes:
     print fc

La walkfunzione può anche essere modificata per cercare tipi specifici di caratteristiche (ad es. Poligoni, punti, raster, ecc.) Cambiando type=""il tipo di caratteristica.


1

Qualche tempo fa mi sono imbattuto in alcuni software che potrebbero essere utili per l'indicizzazione di database geografici e altri dati spaziali:

https://www.voyagersearch.com/

L'ho provato per la nostra azienda e anche se non abbiamo finito per usarlo per vari motivi ha molte funzionalità utili. In sintesi, crea un indice dei tuoi set di dati spaziali che possono quindi essere cercati utilizzando la posizione, in quanto registra l'estensione dei dati, il nome e anche (penso) gli attributi / contenuti dei dati.

Questi sono gli indici di GeoDB: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geod Database-and-Shapefiles

Questa è la loro pagina demo che farà un lavoro migliore nel dimostrare le sue capacità rispetto a me! http://voyagerdemo.com/web/navigo/#/home

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.