Bagaimana cara mengakses featureelayer di SDE melalui Python?

12

Saya mencoba menggunakan Arcpy untuk menjalankan skrip CopyFeatures_management sehingga saya bisa menyalin fiturelayer di SDE.

Apa yang saya gunakan untuk input (dan output, dalam hal ini, karena saya akan menyalin layer kembali ke SDE) untuk mengakses layer?

Michael Todd
sumber

Jawaban:

11

Anda akan menggunakan path ke file SDE plus nama kelas fitur, jadi kira-kira seperti itu

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

Jason Scheirer
sumber
4
Dan 'r' di depan teks melakukan hal yang sama dalam Python sebagai '@' dalam C #, yaitu memperlakukan string sebagai literal sehingga '\' tidak disalahartikan sebagai karakter kontrol?
Michael Todd
2
Benar. Menandai string sebagai literal tanpa karakter kontrol.
Jason Scheirer
16

Dua cara yang bisa saya pikirkan, keduanya melibatkan memiliki Koneksi Database sudah diatur di ArcCatalog. Jika file Koneksi Database belum ada, Anda dapat menggunakan CreateArcSDEConnectionFile_management dalam skrip Anda untuk membuatnya.

1) Setel ruang kerja saat ini ke koneksi database, dan kemudian merujuk ke kelas fitur berdasarkan nama.

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

Jika kelas fitur dalam dataset fitur, tempelkan nama dataset fitur ke ruang kerja seperti:

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

2) Menyediakan jalur lengkap ke kelas fitur termasuk koneksi basis data:

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

Beberapa alat memerlukan metode pertama, yang lain membutuhkan yang kedua.

Juga "Koneksi Database" sebenarnya hanya jalan pintas ke %APPDATA%\ESRI\Desktop10.0\ArcCatalog(untuk ArcGIS 10 pada Windows XP). Anda dapat dengan mudah menyediakan path lengkap ke file .sde yang disimpan di folder itu atau folder lain.

blah238
sumber
Peringatan dalam bahasa lain Anda akan mengubah "Koneksi Database" dengan kata-kata sesuai dengan bahasa perangkat lunak Anda yang digunakan pada sistem. Di tambang, (karena saya perancis) koneksi adalah: fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
GeoStoneMarten
ok, bagaimana jika saya perlu menggunakan layer 1 dari database 1 dan klip ke layer 2 itu di database 2. bagaimana saya menangani env.workspace jika ada dua ruang kerja yang terpisah?
NULL. Bung
1

Sesuai dengan komentar saya sebelumnya, saya memiliki proposisi lain untuk mengakses dengan aman fitur dataset dan featureeclass

# 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

hasil 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

akses hasil dengan jalur:

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
GeoStoneMarten
sumber