上节我们说明了GP服务的异步调用服务的方法,此节说明GP服务同步调用的方法
GP服务同步调用工作原理
GP服务的同步调用不同于异步调用,同步调用会直接将服务处理的结果返回到前端,不会在服务器产生图层。
GP服务异步调用的方法
配置好服务需要的参数,调用excute()函数即可
具 体参考官网链https://developers.arcgis.com/javascript/3/jsapi/geoprocessor-amd.html#execute
查看Server中的同步GP服务(只会在Server中产生一个地理处理服务)
- 查看服务中详细参数
在inputFurther中写入以下测试内容,执行excute
{
"fields":[],
"geometryType":"esriGeometryPoint",
"features":[{"geometry":{"x":21266163.705518104,"y":4004678.1217188686,"spatialReference":{"wkid":2334,"latestWkid":2334}}},
{"geometry":{"x":21265688.294761922,"y":4008771.9365637503,"spatialReference":{"wkid":2334,"latestWkid":2334}}}]
}
- 得到以下运行结果并进行查看
实例代码
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>GP</title>
<link rel="stylesheet" type="text/css" href="http://localhost:8080/arcgis_js_api/library/3.20/3.20/dijit/themes/tundra/tundra.css"/>
<link rel="stylesheet" type="text/css" href="http://localhost:8080/arcgis_js_api/library/3.20/3.20/esri/css/esri.css" />
<script type="text/javascript" src="http://localhost:8080/arcgis_js_api/library/3.20/3.20/init.js"></script>
<style type="text/css">
.MapClass{
width:100%;
height:600px;
border:1px solid #000;
}
</style>
<script type="text/javascript" charset="utf-8">
require(["esri/map",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/layers/GraphicsLayer",
"dojo/dom",
"dojo/dom-attr",
"esri/tasks/Geoprocessor",
"esri/tasks/FeatureSet",
"esri/symbols/SimpleMarkerSymbol",
"esri/symbols/SimpleLineSymbol",
"esri/toolbars/draw",
"esri/symbols/SimpleFillSymbol",
"dojo/on","esri/graphic",
"esri/tasks/LinearUnit",
"dojo/domReady!"],
function (Map,
ArcGISDynamicMapServiceLayer,
GraphicsLayer,
dom,
domAttr,
Geoprocessor,
FeatureSet,
SimpleMarkerSymbol,
SimpleLineSymbol,
Draw,
SimpleFillSymbol,on,Graphic,LinearUnit) {
var MyMap = new Map("MyMapDiv");
var layer = new ArcGISDynamicMapServiceLayer
("http://localhost:6080/arcgis/rest/services/firstTest/cityService/MapServer");
MyMap.addLayer(layer);
//定义点几何对象
var pointSet = new FeatureSet();
var 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]));
on(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);
});
});
on(dom.byId("buffer"),"click",function(e){
//定义GP服务对象
var buffer = new Geoprocessor("http://localhost:6080/arcgis/rest/services/firstTest/bufferExcute/GPServer/buffer");
//构建GP服务参数
var gpParams={};
// //添加fields字段,为了和后台服务字段匹配
// pointSet.fields=[];
//GP服务的Input参数
gpParams.inputFuther =pointSet;
//获取缓冲距离
var bufferDis = domAttr.get(dom.byId("bufferUnit"), "value");
//GP服务的dis参数
var dis=new LinearUnit({
"distance": bufferDis,
"units": "esriKilometers"
});
gpParams.distance =dis;
//执行GP服务
buffer.execute(gpParams, showResult);
});
function showResult(results, messages)
{
var features = results[0].value.features;
var countyLayer = new GraphicsLayer();
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);
countyLayer.add(graphic);
}
MyMap.addLayer(countyLayer);
}
});
</script>
</head>
<body>
<div id="MyMapDiv" class="MapClass"></div>
<input id="Btn" type="button" value="画点" />
<br/>
<label for="bufferUnit" name="bufferUnit">缓冲距离</label>
<input type="text" id="bufferUnit" >:千米
<br/>
<input id="buffer" type="button" value="缓冲区分析" />
</body>
</html>
参考:http://blog.csdn.net/lovecarpenter/article/details/52673406