ArcGIS Pro的python3.x发布GP服务——调用要素图层进行分析

3
分享 2018-02-05
    最近,我在win7 sp1系统下安装的ArcGIS Pro2.0或最新的2.1,遇到一些问题,无法通过pro界面中的操作来发布gp服务,一直报001487服务端数据无法获取的错误,目前原因不明,为了规避这个问题,我尝试采用python发布服务来绕行,结果是可行的。
    首先,贴上我想要发布的GP工具代码,这是一个非常令人兴奋的功能。利用arcpy.FeatureSet(url),来获取某个地图服务的图层数据。获取到数据后,既可以保存并返回数据,也可以进行任何你想要的分析。
import arcpy
#获取参数
url1 = arcpy.GetParameterAsText(1)
url2 = arcpy.GetParameterAsText(0)
output_name = arcpy.GetParameterAsText(2)
#登陆目标地图服务所在的portal,
#也可以将此项设置为参数变量传入,这里为了简化不再设置。
arcpy.SignInToPortal("https://dans.esrichina.com/portal","arcgis","Super123")
#获取地图服务的图层
featSet2 = arcpy.FeatureSet(url1)
featSet = arcpy.FeatureSet(url2)
#调用工具对获取到的图层进行分析
arcpy.Intersect_analysis ([featSet,featSet2], output_name, "ALL", "", "")
此工具所在的工具箱tbx已经作为附件上传,其中另外还有一个保存web服务图层功能的工具。
    然后,进入本篇的主题内容,使用pro的python3.x发布GP服务。首先附上代码。
import arcpy
toolbox = r"D:\pytest\gp\MyProject22.tbx"
sddraft = r"D:\pytest\gp\private\sc.sddraft"
sd = r"D:\pytest\gp\private\sc.sd"
serviceName = "AnalysisService"
# Run the tool and set to a result object
arcpy.ImportToolbox(toolbox)
result = arcpy.myScriptXu_MyProject22(r"https://dans.esrichina.com/ser ... ot%3B,r"D:\pytest\pydata.gdb\private")
# Create service definition draft
arcpy.CreateGPSDDraft(
result, sddraft, serviceName, server_type="MY_HOSTED_SERVICES",
copy_data_to_server=True, folder_name=None,
summary="Private Service", tags="gp", executionType="Synchronous",
resultMapServer=False, showMessages="INFO", maximumRecords=5000,
minInstances=2, maxInstances=3, maxUsageTime=100, maxWaitTime=10,
maxIdleTime=180)
arcpy.StageService_server(sddraft, sd)
arcpy.UploadServiceDefinition_server(sd, "My Hosted Services")
主要流程是,在Python执行一遍此工具箱中的工具,然后借用GP Result创建服务定义文件SDDraft,最后将SDdraft转换为sd文件并发布。
在实际使用中,你可能会遇到这样的错误。
python发GP错误截图.png

别担心,这里说的很明确,此服务定义文件(.sd)要通过ArcGIS Server站点来上传,可以通过ArcMap或ArcGIS Server Manager。我通过此Enterprise站点的Hosting Server来上传如图所示。
sd文件上传.png

发布完成后,即可在Rest页执行来测试了。
天无绝人之路。

2 个评论

arcpy.SignInToPortal方法在2.1才有。
2.0以及以下版本只能调用公开的地图服务,无法调用私有服务。

要回复文章请先登录注册