Tôi đang cố gắng sử dụng Arcpy để chạy tập lệnh CopyFeatures_man quản lý để tôi có thể sao chép một featurelayer trong SDE.
Tôi sử dụng gì cho đầu vào (và đầu ra, cho vấn đề đó, vì tôi sẽ sao chép lớp đó trở lại SDE) để truy cập vào lớp?
Tôi đang cố gắng sử dụng Arcpy để chạy tập lệnh CopyFeatures_man quản lý để tôi có thể sao chép một featurelayer trong SDE.
Tôi sử dụng gì cho đầu vào (và đầu ra, cho vấn đề đó, vì tôi sẽ sao chép lớp đó trở lại SDE) để truy cập vào lớp?
Câu trả lời:
Bạn sẽ sử dụng đường dẫn đến tệp SDE cộng với tên lớp tính năng, vì vậy đại loại như
CopyFeatures_management(r'c:\connections\my.sde\fc1', r'c:\connections\my.sde\newfc')
Hai cách mà tôi có thể nghĩ ra, cả hai đều liên quan đến việc có Kết nối cơ sở dữ liệu đã được thiết lập trong ArcCatalog. Nếu tệp Kết nối cơ sở dữ liệu chưa tồn tại, bạn có thể sử dụng CreateArcSDEConnectionFile_man quản lý trong tập lệnh của mình để tạo tệp.
1) Đặt không gian làm việc hiện tại cho kết nối cơ sở dữ liệu, sau đó tham khảo lớp tính năng theo tên.
arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde"
fc = "SDE.myFeatureClass"
Nếu lớp tính năng nằm trong bộ dữ liệu tính năng, hãy nhập tên bộ dữ liệu tính năng vào không gian làm việc như sau:
arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset"
2) Cung cấp đường dẫn đầy đủ đến lớp tính năng bao gồm kết nối cơ sở dữ liệu:
fc = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
Một số công cụ yêu cầu phương pháp đầu tiên, những công cụ khác yêu cầu phương pháp thứ hai.
Ngoài ra "Kết nối cơ sở dữ liệu" thực sự chỉ là một lối tắt đến %APPDATA%\ESRI\Desktop10.0\ArcCatalog
(đối với ArcGIS 10 trên Windows XP). Bạn có thể dễ dàng cung cấp đường dẫn đầy đủ đến các tệp .sde được lưu trữ trong thư mục đó hoặc các thư mục khác.
fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
Theo nhận xét trước đây của tôi, tôi có một đề xuất khác để truy cập một cách an toàn vào tính năng dữ liệu và featureclass
# 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
kết quả 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
truy cập kết quả với đường dẫn:
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