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?

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')


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.