SDE'de bir özellik katmanı kopyalayabilmeniz için Arcpy CopyFeatures_management betiğini çalıştırmak için kullanmaya çalışıyorum.
Katmana erişmek için katmanı tekrar SDE'ye kopyalayacağım için giriş (ve çıktı, bu konuda ne kullanmalıyım)?
SDE'de bir özellik katmanı kopyalayabilmeniz için Arcpy CopyFeatures_management betiğini çalıştırmak için kullanmaya çalışıyorum.
Katmana erişmek için katmanı tekrar SDE'ye kopyalayacağım için giriş (ve çıktı, bu konuda ne kullanmalıyım)?
Yanıtlar:
SDE dosyasının yolunu ve özellik sınıfı adını kullanacaksınız.
CopyFeatures_management(r'c:\connections\my.sde\fc1', r'c:\connections\my.sde\newfc')
Düşünebileceğim iki yol, ikisi de ArcCatalog'da önceden kurulmuş bir Veritabanı Bağlantısına sahip olmayı içeriyor. Veritabanı Bağlantısı dosyası zaten yoksa, oluşturmak için komut dosyanızda CreateArcSDEConnectionFile_management'ı kullanabilirsiniz .
1) Geçerli çalışma alanını veritabanı bağlantısına ayarlayın ve sonra özellik sınıfına adıyla bakın.
arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde"
fc = "SDE.myFeatureClass"
Feature sınıfı bir özellik veri kümesindeyse, özellik veri kümesi adını çalışma alanına şöyle yapıştırın:
arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset"
2) Veritabanı bağlantısı dahil özellik sınıfının tam yolunu sağlayın:
fc = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
Bazı araçlar ilk yöntemi gerektirirken, diğerleri ikinci yöntemi gerektirir.
Ayrıca "Veritabanı Bağlantıları" aslında sadece bir kısayoldur %APPDATA%\ESRI\Desktop10.0\ArcCatalog
(Windows XP'de ArcGIS 10 için). Bu klasörde veya diğer klasörlerde depolanan .sde dosyalarının tam yolunu kolayca sağlayabilirsiniz.
fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
Önceki yorumum doğrultusunda, veri kümesi ve özellik sınıfına güvenli bir şekilde erişebilmek için başka bir teklifim var
# 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
sonuç 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
yolla sonuç erişimi:
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