Estoy tratando de usar Arcpy para ejecutar el script CopyFeatures_management para poder copiar una capa de características en SDE.
¿Qué uso para la entrada (y la salida, para el caso, ya que volveré a copiar la capa a SDE) para acceder a la capa?
Estoy tratando de usar Arcpy para ejecutar el script CopyFeatures_management para poder copiar una capa de características en SDE.
¿Qué uso para la entrada (y la salida, para el caso, ya que volveré a copiar la capa a SDE) para acceder a la capa?
Respuestas:
Utilizará la ruta al archivo SDE más el nombre de la clase de entidad, de modo que
CopyFeatures_management(r'c:\connections\my.sde\fc1', r'c:\connections\my.sde\newfc')
Dos formas en las que puedo pensar, ambas implican tener una conexión de base de datos ya configurada en ArcCatalog. Si el archivo de conexión de la base de datos aún no existe, puede usar CreateArcSDEConnectionFile_management en su script para crearlo.
1) Establezca el espacio de trabajo actual para la conexión de la base de datos y luego consulte la clase de entidad por su nombre.
arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde"
fc = "SDE.myFeatureClass"
Si la clase de entidad está en un conjunto de datos de entidad, agregue el nombre del conjunto de datos de entidad al espacio de trabajo de la siguiente manera:
arcpy.env.workspace = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset"
2) Proporcione la ruta completa a la clase de entidad, incluida la conexión de la base de datos:
fc = r"Database Connections\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
Algunas herramientas requieren el primer método, otras requieren el segundo.
Además, "Conexiones de base de datos" es en realidad solo un acceso directo a %APPDATA%\ESRI\Desktop10.0\ArcCatalog
(para ArcGIS 10 en Windows XP). Puede proporcionar fácilmente la ruta completa a los archivos .sde que están almacenados en esa carpeta u otras carpetas.
fc = r"Connexions aux bases de données\MySDEDatabaseConnection.sde\SDE.MyFeatureDataset\SDE.MyFeatureClass"
De acuerdo con mi comentario anterior , tengo otra propuesta para acceder de forma segura para presentar el conjunto de datos y la clase de características
# 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
resultado 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
resultado de acceso con ruta:
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