输入要搜索的内容...

代码

此页面显示了我们与客户共享的一些有用代码,以帮助他们自动执行地理处理和其他任务。 这些其他任务的示例包括通过创建可输出到 CSV 文件的数据清单列表来进行数据审核。 例如,我们在此处包含一个脚本,该脚本列出目录中多个文件地理数据库中空间数据的所有元数据,然后将结果输出到 CSV 文件。 然后可以运行第二个脚本来批量更新任何丢失的元数据。

如果您希望在下面的列表中看到某个脚本,请向我们发送消息,因为我们已经编写了数百个这样的脚本,并且我们可能已经有一个可以执行您想要的脚本,或者我们可以为您编写脚本。 同样,其中许多脚本都使用 ArcPy,但是,如果需要,我们可以在没有 ArcPy 的情况下重写任何这些脚本,并且在某些情况下,我们已经编写了一些没有 ArcPy 的脚本,以便您可以在没有 ArcGIS 软件的情况下使用它们。

我们所有的 Python 脚本都使用 Python 3,并且我们使用 Visual Studio Code 作为 IDE。 如果您在运行任何脚本时遇到任何问题,请告诉我们,并记住,在运行任何修改数据的脚本时,备份数据非常重要,以防您需要恢复更改。

列出所有企业级地理数据库和要素类及其元数据

#

此脚本对于审核元数据很有用。 该脚本可以在多个 enterprise 地理数据库上运行,并将创建包含以下列的输出 CSV 文件:“地理数据库”、“要素数据集”、“要素类”、“空间参考”、“行计数”、“列计数”、“元数据标题”、“元数据描述”、“元数据摘要”、“元数据积分”、“元数据访问”约束'。

要使用此脚本,您需要更改第 19 行以指向您的 SDE 连接文件。

import csv
import os

from arcpy import Describe
from arcpy import env
from arcpy import GetCount_management
from arcpy import ListDatasets
from arcpy import ListFeatureClasses
from arcpy import ListFields
from arcpy import metadata as md

# the output CSV file name
output_csv_file = 'enterprise_gdbs_results.csv'

# or use this to make the output CSV file name the same as the script name
# output_csv_file = os.path.basename(__file__).replace('.py','.csv')

# change this path to use your SDE connection files
sde_connection_files = 'c:/gis/sde_connection_files'

with open(output_csv_file,'w',newline='') as csv_file:
    csv_writer = csv.writer(csv_file, delimiter=',')
    column_headers = [
        'Geodatabase', 'Feature Dataset', 'Feature Class', 
        'Spatial Reference', 'Row Count', 'Column Count', 
        'Metadata Title', 'Metadata Description', 'Metadata Summary',
        'Metadata Credits', 'Metadata Access Constraints'
    ]
    
    csv_writer.writerow(column_headers)

    for (folder, dirs, files) in os.walk(sde_connection_files):
        for file in files:
            if(not file.startswith('_') and file.endswith('.sde')):
                geodatabase = file.split('@')[1]

                wksp = os.path.join(folder,file)
                env.workspace = wksp

                datasets = ListDatasets(feature_type='feature')
                datasets = [''] + datasets if datasets is not None else []

                for dataset in datasets:
                    for feature_class in ListFeatureClasses(dataset):
                        desc = Describe(feature_class)
                        spatial_reference = desc.SpatialReference.factoryCode
                        count = GetCount_management(feature_class)[0]
                        column_count = len(ListFields(feature_class))
                        metadata = md.Metadata(feature_class)

                        row = [
                            geodatabase,dataset,feature_class,
                            spatial_reference,count,column_count,
                            metadata.title,metadata.description,
                            metadata.summary,metadata.credits,
                            metadata.accessConstraints    
                        ]

                        print(row)
                        
                        csv_writer.writerow(row)