Come si accede a un livello di prestazioni in SDE tramite Python?


12

Sto cercando di utilizzare Arcpy per eseguire lo script CopyFeatures_management in modo da poter copiare un featurelayer in SDE.

Cosa devo usare per l'input (e l'output, del resto, dal momento che copierò il layer su SDE) per accedere al layer?

Risposte:


11

Utilizzerai il percorso del file SDE più il nome della classe di funzionalità, quindi qualcosa di simile

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


4
E la 'r' davanti al testo fa la stessa cosa in Python come '@' in C #, cioè tratta la stringa come un valore letterale, quindi '\' non viene frainteso come carattere di controllo?
Michael Todd,

2
Corretta. Contrassegna la stringa come letterale senza caratteri di controllo.
Jason Scheirer,

16

Due modi a cui riesco a pensare, entrambi implicano una connessione al database già impostata in ArcCatalog. Se il file Connessione database non esiste già, è possibile utilizzare CreateArcSDEConnectionFile_management nello script per crearlo.

1) Impostare l'area di lavoro corrente sulla connessione al database, quindi fare riferimento alla classe di funzionalità per nome.

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

Se la classe di entità geografiche si trova in un set di dati delle caratteristiche, virare sul nome del set di dati delle caratteristiche nell'area di lavoro in questo modo:

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

2) Fornire il percorso completo alla classe di funzionalità, inclusa la connessione al database:

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

Alcuni strumenti richiedono il primo metodo, altri richiedono il secondo.

Anche "Database Connections" è in realtà solo un collegamento a %APPDATA%\ESRI\Desktop10.0\ArcCatalog(per ArcGIS 10 su Windows XP). È possibile fornire altrettanto facilmente il percorso completo ai file .sde archiviati in quella cartella o in altre cartelle.


Avvertenza in altre lingue cambierete "Connessioni al database" con le parole in base alla lingua del software utilizzata nel sistema. Nel mio, (perché sono francese) la connessione è: fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
GeoStoneMarten

ok, e se avessi bisogno di usare il layer 1 dal database 1 e agganciarlo al layer 2 che è nel database 2. come posso gestire env.workspace se ci sono due aree di lavoro separate?
NULL.Dude

1

In conformità con il mio commento precedente, ho un'altra proposta di accedere in modo sicuro al set di dati e alla 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

risultato 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

risultato risultato con percorso:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.