Przeszukujesz Geobazę w poszukiwaniu Klasy cech lub Tabeli według jej nazwy?

10

Szukam sposobu przeszukiwania Geobazy w poszukiwaniu klasy obiektów lub tabeli za pomocą jej nazwy.

Czy jest dostępna jakaś funkcja tego typu?

Oczywiście wyszukiwanie w systemie Windows zwraca tylko losowe identyfikatory dla tabel w Geobazie. Chciałbym faktycznie wyszukać w nich zestawy danych.

Myślę, że to pomogłoby wielu ludziom, ponieważ wiem, że nie jestem jedynym, który przechowuje dane przestrzenne w Geobazach, tylko archiwizuje je z tysiącem innych zbiorów danych i nie chce ich przesiewać.

Chciałbym przeszukać te Geobazy w ArcCatalog.

Cody Brown
źródło

Odpowiedzi:

4

Jest to długa droga do zrobienia tego, o co pytasz, za pomocą jakiegoś pytona:

  1. Potrzebujesz listy wszystkich GeoDat baz danych, które chcesz przeszukać. Jeśli jest ich dużo, użyj funkcji walk Pythona w danym katalogu. Izoluj dla wszystkich folderów z .gdbnimi lub .mdb, w zależności od bazy danych.

  2. Znajdź wszystkie zbiory danych w GeoDatabase.

  3. Znajdź wszystkie warstwy w zestawie danych.

  4. Szukaj w warstwach tego, czego szukasz.

Oto przykładowy kod tego, o czym mówię:

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    
OtonabeeGIS
źródło
4
Nie wszystkie klasy obiektów znajdują się w zestawach danych elementów (najlepsze praktyki przyniosłyby bardzo niewiele)
Vince
10

Innym sposobem wyszukiwania klas elementów, które mogą, ale nie muszą znajdować się w zbiorze danych, jest użycie walkfunkcji , jak wspomniano wcześniej. Do przeszukiwania potrzebny jest tylko obszar roboczy (tj. Folder zawierający setki 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))

Wynikowa lista będzie zawierać ścieżki i nazwy plików wszystkich klas obiektów, które pasują do kryteriów wyszukiwania, które można wydrukować.

for fc in feature_classes:
     print fc

walkFunkcja ta może być również zmodyfikowany, aby szukać konkretnych typów funkcji (tj wielokąty, punkty, rastry, etc) poprzez zmianę type=""od rodzaju funkcji.

Barbarossa
źródło
1

Jakiś czas temu natknąłem się na oprogramowanie, które może być przydatne do indeksowania baz danych GeoDat i innych danych przestrzennych:

https://www.voyagersearch.com/

Przetestowałem go dla naszej firmy i chociaż nie wykorzystaliśmy go z różnych powodów, ma on wiele przydatnych funkcji. Podsumowując, tworzy indeks twoich zbiorów danych przestrzennych, które można następnie przeszukiwać za pomocą lokalizacji - ponieważ rejestruje zakres danych, nazwę, a także (jak sądzę) atrybuty / zawartość danych.

To oni indeksują GeoDB: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geodatabases-and-Shapefiles

To jest ich strona demonstracyjna, która lepiej sobie zademonstruje swoje możliwości niż ja! http://voyagerdemo.com/web/navigo/#/home

MAJ742
źródło