Geodatabase'i Özellik Sınıfı veya Tablosu adına göre mi arıyorsunuz?


10

Adını kullanarak bir Özellik Sınıfı veya Tablo için Geodatabases aramak için bir yol arıyorum.

Bunun gibi herhangi bir işlev var mı?

Açıkçası, Windows araması yalnızca bir Geodatabase içindeki tablolar için rastgele kimlikleri döndürür. Aslında onların içindeki veri kümelerini aramak istiyorum.

Bunun birçok insana yardımcı olacağını düşünüyorum, çünkü Geodatabases'te uzamsal verileri depolayan tek kişi olmadığımı, sadece bin başka veri kümesiyle arşivlemek ve gözden geçirmek istemediğimi biliyorum.

Bu Geodatabases'i ArcCatalog içinde aramak istiyorum.


Yanıtlar:


4

Bu, bazı python kullanarak sorduğunuz şeyi yapmanın uzun bir yoludur:

  1. Aramak istediğiniz tüm GeoDatabas'ların bir listesine ihtiyacınız var. Çok fazla varsa, söz konusu dizinde python'un yürüyüş işlevini kullanın. İçinde bir olan tüm klasörleri .gdbveya .mdbveritabanına bağlı olarak yalıtın .

  2. GeoDatabase içindeki tüm veri kümelerini bulun.

  3. Veri kümesindeki tüm katmanları bulun.

  4. Aradığın şey için katmanlardan arama sonuçları.

İşte bahsettiğim şeyin bir kod örneği:

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
Tüm özellik sınıfları özellik veri kümelerinde değildir (en iyi uygulama çok
Vince

10

Veri kümesinde bulunabilen veya bulunmayan özellik sınıflarını aramanın başka bir yolu, walkişlevi daha önce belirtildiği gibi kullanmaktır . Yalnızca arama yapmak için bir çalışma alanı gerektirir (yani yüzlerce GDB içeren bir klasör).

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

Sonuçta ortaya çıkan liste, arama kriterlerinize uyan ve yazdırılabilen tüm özellik sınıflarının yollarını ve dosya adlarını içerecektir.

for fc in feature_classes:
     print fc

walkFonksiyon aynı zamanda değiştirilerek (örneğin çokgen, noktalar, raster, vs.) özellikleri belirli türleri aramak için modifiye edilebilir type=""özelliği tipine.


1

Bir süre önce GeoDatabases ve diğer uzamsal verileri indekslemek için yararlı olabilecek bazı yazılımlarla karşılaştım:

https://www.voyagersearch.com/

Şirketimiz için denedim ve çeşitli nedenlerle kullanmamamıza rağmen bir sürü yararlı işlevselliğe sahip. Özetle, uzamsal veri kümelerinizin daha sonra konum kullanılarak aranabilen bir dizin oluşturur - verilerin kapsamını, adını ve ayrıca (bence) verilerin niteliklerini / içeriğini kaydeder.

Bu GeoDB'leri endeksliyorlar: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geodatabases-and-Shapefiles

Bu onların yeteneklerini göstermek için benden daha iyi bir iş yapacak demo sayfası! http://voyagerdemo.com/web/navigo/#/home

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.