Python経由でSDEの機能レイヤーにアクセスするにはどうすればよいですか?


12

Arcdeを使用してCopyFeatures_managementスクリプトを実行し、SDEで機能レイヤーをコピーしようとしています。

レイヤーにアクセスするための入力(および、出力についてはレイヤーをSDEにコピーするため)には何を使用しますか?

回答:


11

SDEファイルへのパスとフィーチャクラス名を使用するため、次のようになります。

CopyFeatures_management(r'c:\connections\my.sde\fc1', r'c:\connections\my.sde\newfc')


4
そして、テキストの前の 'r'はPythonでC#の '@'と同じことをします。つまり、文字列をリテラルとして扱い、 '\'が制御文字と誤解されないようにしますか?
マイケルトッド

2
正しい。文字列を制御文字なしのリテラルとしてマークします。
ジェイソンシャイラー

16

私が考えることができる2つの方法は、どちらもArcCatalogですでにデータベース接続をセットアップすることを含みます。データベース接続ファイルがまだ存在しない場合は、スクリプトでCreateArcSDEConnectionFile_managementを使用して作成できます。

1)現在のワークスペースをデータベース接続に設定し、フィーチャクラスを名前で参照します。

arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde"
fc = "SDE.myFeatureClass"

フィーチャクラスがフィーチャデータセットにある場合は、次のようにワークスペースにフィーチャデータセット名を追加します。

arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset"

2)データベース接続を含むフィーチャクラスへのフルパスを指定します。

fc = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"

最初の方法が必要なツールもあれば、2番目の方法が必要なツールもあります。

また、「データベース接続」は実際には単なるショートカットです%APPDATA%\ESRI\Desktop10.0\ArcCatalog(Windows XP上のArcGIS 10の場合)。そのフォルダーまたは他のフォルダーに保存されている.sdeファイルへの完全パスを簡単に指定できます。


他の言語では、システムで使用されているソフトウェア言語に応じて「データベース接続」を言葉で変更することを警告します。私の場合、(私はフランス語なので)接続は次の fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
とおりです。– GeoStoneMarten

わかりました。データベース1のレイヤー1を使用して、データベース2のレイヤー2にクリップする必要がある場合はどうすればよいですか。
NULL。男

1

以前のコメントに従って、フィーチャデータセットとフィーチャクラスに安全にアクセスするという別の提案があります。

# catalog local and arcgis version
arcgis_version = arcpy.GetInstallInfo()['Version'].split(
    ".")  # liste v_majeur,v_mineur
catalog_path = "{}\\ESRI\\Desktop{}\\ArcCatalog".format(
    os.getenv('APPDATA'), ".".join(
        arcpy.GetInstallInfo()['Version'].split(".")[:2])) # Work with Arcgis >= 10.3
conn = {}
conn["out_folder_path"] = catalog_path
conn["out_name"] = "server_x_db_user.sde"
conn["database_platform"] = "SQL_SERVER"
conn["instance"] = "server_x"
conn["account_authentication"] = "DATABASE_AUTH"
conn["database"] = "bdd"
conn["username"] = "db_user"
conn["password"] = "MydbPasS@"
conn["save_user_pass"] = "SAVE_USERNAME"

arcpy.CreateDatabaseConnection_management(**conn)
#result
# >>> <Result 'C:\\Users\\me\\AppData\\Roaming\\ESRI\\Desktop10.4\\ArcCatalog\\server_x_db_user.sde'>
desc = arcpy.Describe(os.path.join(conn["out_folder_path"],conn["out_name"]) 
# you can also pass by arcpy.Result object
arcpy.env.workspace = os.path.join(desc.path, desc.name)
#safe env for arcCatalog sde folder

print arcpy.env.workspace 
# >>> u'Connexions aux bases de donn\xe9es\\server_x_db_user.sde'

for ds in arcpy.ListDatasets(feature_type='feature') + ['']:
    for fc in arcpy.ListFeatureClasses(feature_dataset=ds):
        print fc
        # Remove empty dataset to get valid path
        path = os.path.join(
            *[v for v in [arcpy.env.workspace, ds, fc] if v])
        print path

結果FC:

bdd.user_db.bndy_lv_municipal_sector
bdd.user_db.bndy_admin_lv_municipal
bdd.user_db.water_pg
bdd.user_db.water_pl

パスを使用した結果アクセス:

Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.bndy_lv_municipal_sector
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.bndy_admin_lv_municipal
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.water_pg
Connexions aux bases de données\server_x_db_user.sde\bdd.user_db.water_pl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.