打啲嘢去 search ...

程式碼

此頁面顯示了我們與客戶分享的一些有用程式碼,以協助他們自動執行地理處理和其他任務。 這些其他任務的範例包括透過建立可輸出到 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)