Поиск в базе геоданных для класса объектов или таблицы по его имени?


10

Я ищу способ поиска в базах геоданных по классу пространственных объектов или таблице, используя его имя.

Есть ли такая функция, как эта?

Очевидно, что поиск Windows возвращает только случайные идентификаторы для таблиц в базе геоданных. Я хотел бы на самом деле искать наборы данных в них.

Я думаю, что это помогло бы многим людям, потому что я знаю, что я не единственный, кто хранит пространственные данные в базах геоданных, только для того, чтобы архивировать их с тысячами других наборов данных и не хочет просеивать их.

Я хотел бы найти эти базы геоданных в ArcCatalog.


Ответы:


4

Это длинный способ сделать то, что вы просите, используя некоторый Python:

  1. Вам нужен список всех баз геоданных, которые вы хотите найти. Если их много, используйте функцию python walk для рассматриваемого каталога. Изолировать для любых папок с .gdbили в .mdbзависимости от базы данных.

  2. Найдите все наборы данных в базе геоданных.

  3. Найдите все слои в наборе данных.

  4. Результаты поиска по слоям для того, что вы ищете.

Вот пример кода того, о чем я говорю:

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
Не все классы объектов входят в наборы классов объектов (лучшие практики приведут к очень немногим)
Vince

10

Другой способ поиска классов пространственных объектов, которые могут быть или не быть в наборе данных, - это использовать walkфункцию , как упоминалось ранее. Для поиска требуется только рабочее пространство (т. Е. Папка, содержащая сотни 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))

Полученный список будет содержать пути и имена всех классов объектов, которые соответствуют вашим критериям поиска, которые можно распечатать.

for fc in feature_classes:
     print fc

walkФункция также может быть модифицирована для поиска конкретных типов функций (т.е. многоугольники, точки, растры и т.д.) путем изменения type=""в тип объекта.


1

Некоторое время назад я столкнулся с некоторым программным обеспечением, которое может быть использовано для индексации баз геоданных и других пространственных данных:

https://www.voyagersearch.com/

Я опробовал его для нашей компании, и хотя мы не использовали его по разным причинам, он имеет множество полезных функций. В итоге он создает индекс ваших пространственных наборов данных, который затем можно искать с использованием местоположения - поскольку он записывает объем данных, имя, а также (я думаю) атрибуты / содержимое данных.

Это они индексируют GeoDB: https://voyagersearch.zendesk.com/hc/en-us/articles/204187447-Indexing-Esri-Geodatabases-and-Shapefiles

Это их демонстрационная страница, которая лучше продемонстрирует свои возможности, чем я! http://voyagerdemo.com/web/navigo/#/home

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.