Suchen Sie in der Geodatabase nach Feature-Class oder Tabelle nach ihrem Namen?


10

Ich suche nach einer Möglichkeit, Geodatabases anhand ihres Namens nach einer Feature-Class oder Tabelle zu durchsuchen.

Gibt es eine solche Funktion?

Offensichtlich gibt die Windows-Suche nur die zufälligen IDs für die Tabellen in einer Geodatabase zurück. Ich möchte tatsächlich nach darin enthaltenen Datensätzen suchen.

Ich denke, dies würde vielen Menschen helfen, da ich weiß, dass ich nicht der einzige bin, der Geodaten in Geodatabases speichert, sondern sie nur mit tausend anderen Datensätzen archiviert und nicht durchsuchen möchte.

Ich möchte diese Geodatabases in ArcCatalog durchsuchen.


Antworten:


4

Dies ist ein langer Weg, um das zu tun, was Sie verlangen, mit etwas Python:

  1. Sie benötigen eine Liste aller GeoDatabases, die Sie durchsuchen möchten. Wenn es viele gibt, verwenden Sie die Python-Walk-Funktion für das betreffende Verzeichnis. Isolieren Sie für alle Ordner mit einem .gdbin oder .mdb, abhängig von der Datenbank.

  2. Suchen Sie alle Datensätze in der GeoDatabase.

  3. Suchen Sie alle Ebenen im Datensatz.

  4. Suchergebnisse aus Ebenen für das, was Sie suchen.

Hier ist ein Codebeispiel von dem, wovon ich spreche:

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
Nicht alle Feature-Classes befinden sich in Feature-Datensätzen (Best Practice würde zu sehr wenigen führen)
Vince

10

Eine andere Möglichkeit, nach Feature-Classes zu suchen, die sich möglicherweise in einem Dataset befinden oder nicht, besteht darin, die zuvor erwähnte walkFunktion zu verwenden . Für die Suche ist nur ein Arbeitsbereich erforderlich (dh ein Ordner mit Hunderten von 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))

Die resultierende Liste enthält die Pfade und Dateinamen aller Feature-Classes, die Ihren Suchkriterien entsprechen und gedruckt werden können.

for fc in feature_classes:
     print fc

Die walkFunktion kann auch geändert werden, um nach bestimmten Arten von Features (z. B. Polygonen, Punkten, Rastern usw.) zu suchen, indem Sie type=""zum Feature-Typ wechseln .


1

Ich bin vor einiger Zeit auf eine Software gestoßen, die für die Indizierung von GeoDatabases und anderen räumlichen Daten hilfreich sein kann:

https://www.voyagersearch.com/

Ich habe es für unser Unternehmen getestet und obwohl wir es aus verschiedenen Gründen nicht verwendet haben, bietet es eine Menge nützlicher Funktionen. Zusammenfassend wird ein Index Ihrer Geodatensätze erstellt, der dann anhand des Standorts durchsucht werden kann. Dabei werden der Umfang der Daten, der Name und (glaube ich) die Attribute / Inhalte der Daten aufgezeichnet.

Dies ist der Index für GeoDBs: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geodatabases-and-Shapefiles

Dies ist ihre Demoseite, die ihre Fähigkeiten besser demonstrieren kann als ich! http://voyagerdemo.com/web/navigo/#/home

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.