python制作成GP工具、发布服务、js页面调用操作手册【附文档数据代码】

7
分享 2017-09-05
Esri西安分公司:严瑞

以一个小示例说明:准备一个点图层数据,有Name字段,完成任务:插入点到图层,并给Name字段属性值。
 
目录


1.准备数据
2.准备python脚本
3.制作GP工具
4.GP工具测试
5.制作模型
6.发布服务
6.Rest服务测试
7.js调用




1.准备数据
Point点图层,增加一个属性Name字段





2.准备python脚本
将如下脚本复制到一个记事本中:
import arcpy;

dataResource=arcpy.GetParameterAsText(0)//获取第0个参数

jd = arcpy.GetParameterAsText(1)

wd = arcpy.GetParameterAsText(2)

name=arcpy.GetParameterAsText(3)

cur = arcpy.InsertCursor(dataResource)

pnt = arcpy.Point("Point")

pnt.X = jd

pnt.Y = wd

row = cur.newRow()

row.shape = pnt

row.Name=name

cur.insertRow(row)
将记事本另存为后缀名为.py的文件,这里我命名为InsertPoint,如下:



3.制作GP工具
在ArcCatalog中选中你的存放文件夹,点击鼠标右键:新建“工具箱”



选择“工具箱”,点击鼠标右键



添加脚本:



下一步,选择InserPoint.py



下一步,设置输入输出参数:(红框中选择参数类型:输入还是输出,这里我们都是输入参数)


点击“完成“。

4.GP工具测试
双击上一步制作好的工具,并输入参数:


点击确定,执行成功如下:



打开point图层的属性表,查看新添加进去的数据如下:



5.制作模型
在ArcCatalog中,选择工具箱,鼠标右键新建模型





将上面制作的InsertPoint工具拖入模型中:



点击InsertPoint工具,鼠标点击右键获取参数:





获取第一个参数dataPath(当前还没有设置输入路径)



设置输入参数:双击dataPath,设置point图层路径



点击“确定“:



以同样的方式获取其他参数jd、wd、name:


jd



wd





Name:





确定,最终输入好参数的模型如下:

 
下面来对模型设置输入参数:这里设置jd、wd、name.(point作为固定数据,不设置),选择jd,右键点击“模型参数“,以此类推,设置wd、name



设置好参数后的模型如下:



保存模型。

6.发布服务
发布GP服务执行需要先执行一次模型,双击上一步保存的模型,如下是默认的参数



点击“确定“,执行成功如下:



接下来发布服务:在ArcMap菜单中,地理处理/结果对话框,选择刚才执行的“模型“右键,点击“共享/地理处理服务“:





发布服务:



点击“下一步“:



下一步:



继续,进入服务编辑器,如下,在编辑器中需要输入参数的描述,否则会报错







选择同步执行:



点击右上角“发布“:



发布成功提示如下:



6.Rest服务测试
打开ArcGIS Server Rest目录,可以看到刚才发布InsertPoint服务











点击
,进入下一页,页面下方有Execute Task操作





点击Execute Task,输入参数,执行后显示如下,代表已经成功插入数据





再到ArcMap中查看,已经成功插入该点。





7.js调用
输入一个点,Format选择JSON格式



点击Execute Task,弹出如下:



这时候已经将这个点插入进去了。这里要用到的是url地址,到浏览器中将地址复制如下:

http://localhost:6080/arcgis/rest/services/InsertPoint/GPServer/%E6%A8%A1%E5%9E%8B/execute?jd=109&wd=37&name=forthPoint&env%3AoutSR=&env%3AprocessSR=&returnZ=false&returnM=false&f=pjson



我们更改三个参数如下:

http://localhost:6080/arcgis/rest/services/InsertPoint/GPServer/%E6%A8%A1%E5%9E%8B/execute?jd=108.8&wd=37.6&name=fifthPoint&env%3AoutSR=&env%3AprocessSR=&returnZ=false&returnM=false&f=pjson
将如下代码写到记事本中,并另存为后缀名为.html的文件:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9, IE=10">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>JSON Content</title>
<script>var dojoConfig = { isDebug: true };</script>
<script src="http://serverapi.arcgisonline. ... gt%3B
<script>
var url = " http://localhost:6080/arcgis/r ... 3B%3B
var xmlHttp=GetXmlHttpObject();
function getContent()
{

xmlHttp.open("GET",url,true); //submit the URL request

xmlHttp.send(null);

xmlHttp.onreadystatechange= function()

{

// Here we process the response

// var responseText=xmlHttp.responseText;

//alert(responseText);

alert("ok");
}
}

function GetXmlHttpObject() {

var xmlHttp=null;

try {

// Firefox, Opera 8.0+, Safari

xmlHttp=new XMLHttpRequest();

} catch (e) {

// Internet Explorer

try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}

}
if (xmlHttp==null) {
alert ("Your browser does not support AJAX!");
return;
}
return xmlHttp;
}
</script>
</head>
<body style="font-family: Arial Unicode MS,Arial,sans-serif;">
<p>
Enter URL here: <input type="text" disabled="true" id="url" size="75" />
<input type="button" value="GO" onclick="getContent();" />
<span id="status"></span>
</p>
<p>
</body>
</html>

另存后如下:



用鼠标双击



点击“Go”,弹出ok



代表数据已经插入进去,查看属性表:


结束。

4 个评论

可以
你好,你这里设置的是同步,我需要设置为异步,并且查看地图服务。我在js中调用这个gp服务时候,正常执行,D:\arcgisserver\directories\arcgisjobs\<gp服务名>文件夹中也有生成对应jobid的文件夹,里面数据库中有生成的栅格数据,这些都是正常的,但是前端js再加载生成的栅格数据时报错,400错误,Bad Request,请问这是为什么?
你这个GP服务生成的新的shape在哪找
第一个那个脚本是不是有问题,为什么我调试总是失败

要回复文章请先登录注册