Skip To Content

Ejemplo: Publicar un servicio de geoprocesamiento a partir del resultado de un modelo

Esta secuencia de comandos de Phyton ejecuta un modelo y publica el resultado en ArcGIS Server en forma de servicio de geoprocesamiento.

La secuencia de comandos construye primero unas capas de entidades y ejecuta el modelo Tarea de extracción de datos de la caja de herramientas Herramientas de servidor. Si la ubicación de la capa de entidades no está registrada en ArcGIS Server, la secuencia de comandos llama a arcpy.AddDataStoreItem para registrar la base de datos o la carpeta. A continuación, la secuencia de comandos invoca arcpy.CreateGPSDDraft para crear un borrador de un archivo de definición de servicio (SD) a partir del resultado del modelo.

Si no se detectan errores en el análisis del borrador del SD, la secuencia de comandos continúa con la publicación del servicio.

import arcpy
import os

connPath = "c:/gis/conections/myServer.ags"
sddraft = "c:/gis/gp/drafts/ExtractionDraft.sddraft"
sd = "c:/gis/gp/sd/AnalysisDraft.sd"
serviceName = "DataExtractor"
arcpy.env.workspace = "c:/gis/citydata"

# create layers which will be available as input
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/Cityhall', 'CityHall')
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/Airport', 'Airport')
arcpy.MakeFeatureLayer_management('Wiarton.gdb/places/FireStations', 'FireStations')

# run the extract data task and assign it to the 'result' variable
# only the cityhall layer was used as input, but the airport and firestation layers will be used in the service creation
aoi = "c:/gis/citydata/extract.shp"
result = arcpy.ExtractDataTask_server("CityHall", aoi, "File Geodatabase - GDB - .gdb", "ESRI GRID - GRID", os.path.join(arcpy.env.scratchFolder, "output.zip"))

# make sure the folder is registered with the server, if not, add it to the datastore
if arcpy.env.workspace not in [i[2] for i in arcpy.ListDataStoreItems(connPath, 'FOLDER')]:
     # both the client and server paths are the same
     dsStatus = arcpy.AddDataStoreItem(connPath, "FOLDER", "CityData", arcpy.env.workspace, arcpy.env.workspace)
     print "Data store : " + str(dsStatus)


# create service definition draft
arcpy.CreateGPSDDraft(
    result, sddraft, serviceName, server_type="ARCGIS_SERVER",
    connection_file_path=connPath, copy_data_to_server=False, 
    folder_name=None, summary="Extraction Service", tags="extract data, clip")
   

# analyze the service definition draft
analyzeMessages = arcpy.mapping.AnalyzeForSD(sddraft)

# stage and upload the service if the sddraft analysis did not contain errors
if analyzeMessages['errors'] == {}:
    # Execute StageService
    arcpy.StageService_server(sddraft, sd)
    # Execute UploadServiceDefinition
    upStatus = arcpy.UploadServiceDefinition_server(sd, connPath)
    print "Completed upload"
else: 
    # if the sddraft analysis contained errors, display them
    print analysis['errors']