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?
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:
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')
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.
fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
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