คนเราเข้าถึง featurelayer ใน SDE ผ่าน Python ได้อย่างไร


12

ฉันกำลังพยายามใช้ Arcpy เพื่อเรียกใช้สคริปต์ CopyFeatures_management เพื่อให้ฉันสามารถคัดลอก featurelayer ใน SDE

ฉันจะใช้อะไรกับอินพุต (และเอาท์พุทสำหรับเรื่องนั้นเนื่องจากฉันจะคัดลอกเลเยอร์กลับไปที่ SDE) เพื่อเข้าถึงเลเยอร์

คำตอบ:


11

คุณจะใช้พา ธ ไปยังไฟล์ SDE บวกกับชื่อคลาสคุณลักษณะดังนั้นจะมีบางอย่างที่เหมือนกัน

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


4
และ 'r' ที่อยู่ด้านหน้าของข้อความทำสิ่งเดียวกันใน Python เหมือนกับ '@' ใน C # นั่นคือถือว่าสตริงเป็นตัวอักษรดังนั้น '\' จึงไม่ได้เข้าใจผิดว่าเป็นตัวควบคุม?
Michael Todd

2
แก้ไข. ทำเครื่องหมายสตริงเป็นตัวอักษรโดยไม่มีอักขระควบคุม
Jason Scheirer

16

สองวิธีที่ฉันนึกได้ทั้งสองวิธีเกี่ยวข้องกับการเชื่อมต่อฐานข้อมูลที่ตั้งค่าไว้แล้วใน ArcCatalog หากไฟล์การเชื่อมต่อฐานข้อมูลไม่มีอยู่คุณสามารถใช้CreateArcSDEConnectionFile_managementในสคริปต์ของคุณเพื่อสร้าง

1) ตั้งค่าเวิร์กสเปซปัจจุบันเป็นการเชื่อมต่อฐานข้อมูลจากนั้นอ้างอิงคลาสคุณลักษณะตามชื่อ

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

หากคลาสคุณลักษณะอยู่ในชุดข้อมูลคุณลักษณะให้ยึดชื่อชุดข้อมูลคุณลักษณะเข้ากับเวิร์กสเปซดังนี้:

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

2) จัดหาเส้นทางแบบเต็มไปยังคลาสคุณลักษณะรวมถึงการเชื่อมต่อฐานข้อมูล:

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

เครื่องมือบางอย่างต้องใช้วิธีแรกส่วนอื่น ๆ ต้องการวิธีที่สอง

นอกจากนี้ "การเชื่อมต่อฐานข้อมูล" เป็นเพียงทางลัดไปยัง%APPDATA%\ESRI\Desktop10.0\ArcCatalog(สำหรับ ArcGIS 10 บน Windows XP) คุณสามารถจัดหาพา ธ แบบเต็มไปยังไฟล์. sde ที่เก็บไว้ในโฟลเดอร์นั้นหรือโฟลเดอร์อื่น ๆ ได้อย่างง่ายดาย


คำเตือนในภาษาอื่นคุณจะเปลี่ยน "การเชื่อมต่อฐานข้อมูล" ด้วยคำตามภาษาซอฟต์แวร์ของคุณที่ใช้ในระบบ ในเหมือง (เพราะฉันเป็นคนฝรั่งเศส) การเชื่อมต่อคือ: fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
GeoStoneMarten

ตกลงถ้าฉันจำเป็นต้องใช้เลเยอร์ 1 จากฐานข้อมูล 1 และคลิปไปที่เลเยอร์ 2 นั่นในฐานข้อมูล 2. ฉันจะจัดการ env.workspace ได้อย่างไรถ้ามีพื้นที่ทำงานแยกกันสองแห่ง
NULL.Dude

1

ตามความคิดเห็นก่อนหน้าของฉันฉันมีข้อเสนออื่น ๆ ที่จะ acces อย่างปลอดภัยเพื่อคุณสมบัติชุดข้อมูลและ 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

ผลฟุตบอล:

bdd.user_db.bndy_lv_municipal_sector
bdd.user_db.bndy_admin_lv_municipal
bdd.user_db.water_pg
bdd.user_db.water_pl

การเข้าถึงผลลัพธ์ด้วยพา ธ :

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.