파이썬을 통해 SDE의 피처 레이어에 어떻게 액세스합니까?


12

Spy에서 피처 레이어를 복사 할 수 있도록 Arcpy를 사용하여 CopyFeatures_management 스크립트를 실행하려고합니다.

레이어에 액세스하기 위해 입력 (및 그 문제에 대해 레이어를 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(Windows XP의 ArcGIS 10의 경우) 바로 가기 입니다. 해당 폴더 또는 다른 폴더에 저장된 .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

내 이전 의견에 따라 피쳐 데이터 세트 및 피쳐 클래스에 안전하게 액세스하는 다른 제안이 있습니다.

# 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

결과 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

경로를 통한 결과 액세스 :

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.