ArcGIS API中关于GP服务的调用是比较容易出错的,出错的大部分原因便是Web API调用GP服务的时候参数不对应导致的
ArcGIS API调用GP服务
然后接下来我们将在Web中调用我们的GP服务
代码实现
在页面加入地图(略)
在页面添加两个按钮(第一个按钮用于画点,第二个按钮用于缓冲区分析)1
2<input id="Btn" type="button" value="画点" />
<input id="buffer" type="button" value="缓冲区分析" />
定义一个点几何对象(与服务定义的类型对应)1
2//定义点几何对象
var pointSet = new FeatureSet();
定义点符号对象1
2
3
4var psymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.STYLE_CROSS, 12,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
new dojo.Color([255, 0, 0]), 2),
new dojo.Color([0, 255, 0, 0.25]));
给画点按钮绑定点击事件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17on(dom.byId("Btn"),"click",function(e){
//定义绘图对象
var toolBar= new Draw(MyMap, { showTooltips: true });
//激活绘图对象
toolBar.activate(Draw.POINT);
on(toolBar, "draw-complete", function(result){
//获得绘图结束的点对象
var geometry = result.geometry;
//根据点对象生成相应的图形
var graphic = new Graphic(geometry, psymbol);
//将点对象存储在点几何中
pointSet.features.push(graphic);
//将图形存放在地图中,然后得以显示
MyMap.graphics.add(graphic);
});
});
给缓冲区分析按钮添加绑定事件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16on(dom.byId("buffer"),"click",function(e){
//定义GP服务对象
var buffer = new Geoprocessor("http://localhost:6080/arcgis/rest/services/Test/MyBuffer/GPServer/Mybuffer");
//构建GP服务参数
var gpParams={};
//GP服务的Input参数
gpParams.Input=pointSet;
//GP服务的dis参数
var dis=new LinearUnit({
"distance": 100,
"units": "esriMeters"
});
gpParams.dis=dis;
//执行GP服务
buffer.execute(gpParams, showResult);
})
处理GP服务返回的结果1
2
3
4
5
6
7
8
9
10
11
12
13function showResult(results, messages){
var features = results[0].value.features;
for (var i = 0; i < features.length; i++) {
var graphic = features[i];
//定义线符号
var lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255, 0, 0]), 1);
//定义面符号
var PolygonSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, lineSymbol, new dojo.Color([255, 255, 0, 0.25]));
//设置面符号
graphic.setSymbol(PolygonSymbol);
MyMap.graphics.add(graphic);
}
}
运行代码发现错误
此时我们观察前台传给后台的参数1
2
3
4
5
6Input:{
"geometryType":"esriGeometryPoint",
"features":[{"geometry":{"x":21264961.8441914,"y":3997922.462940743,"spatialReference":{"wkid":2334,"latestWkid":2334}}}],
"sr":{"wkid":2334,"latestWkid":2334}
}
dis: {"distance":100,"units":"esriMeters"}
传给后台的参数和GP服务的参数对比,发现Input参数,缺少fields字段:
修改错误
我们给运行GP服务之前给Input参数添加上Fields字段:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18on(dom.byId("buffer"),"click",function(e){
//定义GP服务对象
var buffer = new Geoprocessor("http://localhost:6080/arcgis/rest/services/Test/MyBuffer/GPServer/Mybuffer");
//构建GP服务参数
var gpParams={};
//添加fields字段,为了和后台服务字段匹配
pointSet.fields=[];
//GP服务的Input参数
gpParams.Input=pointSet;
//GP服务的dis参数
var dis=new LinearUnit({
"distance": 100,
"units": "esriMeters"
});
gpParams.dis=dis;
//执行GP服务
buffer.execute(gpParams, showResult);
});
全部代码
1 | <!DOCTYPE html> |