Làm thế nào để một người truy cập một featurelayer trong SDE thông qua Python?


12

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:


11

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


4
Và 'r' ở phía trước văn bản thực hiện điều tương tự trong Python là '@' trong C #, tức là coi chuỗi là một nghĩa đen để '\' không bị hiểu nhầm là ký tự điều khiển?
Michael Todd

2
Chính xác. Đánh dấu chuỗi là chữ mà không có ký tự điều khiển.
Jason Scheirer

16

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.


Cảnh báo bằng các ngôn ngữ khác, bạn sẽ thay đổi "Kết nối cơ sở dữ liệu" bằng các từ theo ngôn ngữ phần mềm của bạn được sử dụng trên hệ thống. Trong tôi, (vì tôi là người Pháp), kết nối là: fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
GeoStoneMarten

ok, nếu tôi cần sử dụng lớp 1 từ cơ sở dữ liệu 1 và cắt nó thành lớp 2 trong cơ sở dữ liệu 2. làm cách nào để xử lý env.workspace nếu có hai không gian làm việc riêng biệt?
NULL.Dude

1

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.