以制作一个buffer缓冲区为例子来说明
一 制作GP工具
1.1 打开arcmap,点击
图标,准备建立模型。
1.2 从arctoolbox拖拽空间分析工具buffer进入模型。
1.3 设置buffer工具的输入输出参数 缓冲的要素集和缓冲距离。
右键 输入的参数项,点击"模型参数",参数项 右上角会多个 P。P是参数变量(paramvar)的开头字母的意思。
1.4 设置输入输出参数默认值
双击输入要素集,在对话框中选择要缓冲的要素集,比如我自己的点要素集“BasePt"。
距离由于是84经纬度,我设置缓冲十进制度,0.001距离。设置完毕后,模型参数都会改变颜色
1.5 验证模型
点是输入的要素集 basept,圈是模型生成的结果。证明模型可以正常运行。将模型保存到指定的工作空间或磁盘目录中。
二 Arcserver发布GP
2.1 打开catalog(10.2版本我的示例),打开 地理处理》结果。。。如下。
2.2 执行刚刚创建的脚本 Mytest,输入正确的参数,执行。(必须执行一遍)
2.3 正确执行后,”结果“窗口中会有执行结果。
2.4 添加对工具的说明和参数说明(必须的,否则发布不了)
catalog中 ,点击右边的 描述>编辑
将项目描述和参数描述都补写上。然后保存
2.5 右键 ”结果“中的mytest,设置为共享。一路next,如正常的arcserver服务发布。
2.6 查看发布的服务
发布成功
三 arcgis api客户端使用
3.1 正常把basept这个点数据发布成服务
3.2 客户端加载测试页面
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<title>ArcGIS JavaScript API: test</title>
<link href='/ArcGIS/rest/ESRI.ArcGIS.Rest.css' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="http://localhost/arcgis_js_api/library/3.7/3.7/js/dojo/dijit/themes/tundra/tundra.css"/>
<link rel="stylesheet" type="text/css" href="http://localhost/arcgis_js_api/library/3.7/3.7/js/esri/css/esri.css" />
<script type="text/javascript" src="http://localhost/arcgis_js_api/library/3.7/3.7/init.js"></script>
<script type="text/javascript">
dojo.require("esri.map");
dojo.require("esri.tasks.query");
dojo.require("esri.tasks.queryTask");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.BorderContainer");
dojo.require("esri.tasks.gp");
var map,gp;
function Init() {
dojo.style(dojo.byId("map"), { width: dojo.contentBox("map").w + "px", height: (esri.documentBox.h - dojo.contentBox("navTable").h - 40) + "px" });
map = new esri.Map("map");
var layer = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost/ArcGIS/rest/services/test/MapServer");
map.addLayer(layer);
var resizeTimer;
dojo.connect(map, 'onLoad', function(theMap) {
dojo.connect(dijit.byId('map'), 'resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
map.resize();
map.reposition();
}, 500);
});
//查询全部要素,执行gp。
queryByCode();
});
}
//属性查询
function queryByCode()
{
var query=new esri.tasks.Query();
var whereStr = "fid>0 ";
query.where = whereStr;
query.outFields = ["*"];
query.returnGeometry = true;
var QueryTask=new esri.tasks.QueryTask("http://localhost/arcgis/rest/services/test/MapServer/0");
QueryTask.execute(query, ShowQueryResult);
}
//查询结果
function ShowQueryResult(idResults)
{
tojob(idResults.features);
}
function tojob(features) {
//第一步构造GP
var gpUrl = 'http://localhost/arcgis/rest/services/MyBuffer/GPServer/MyTest';
gp = new esri.tasks.Geoprocessor(gpUrl);
//第二步,构造参数
//我们通过上面,了解到GPFeatureRecordSetLayer对应FeatureSet
//var features = [];
//features.push(graphic);
var featureset = new esri.tasks.FeatureSet();
featureset.features = features;
//构造缓冲长度,这里的单位是可以更改的,我使用的是度,简单一些
var Dis = new esri.tasks.LinearUnit();
Dis.distance = 0.001;
Dis.units = esri.Units.DECIMAL_DEGREES;
//Distance__value_or_field_,后悔当时参数名字没有改
var parms = {
InputClass : featureset,
Distance : Dis
};
//这里函数是异步的,使用函数是submitJob,同步的使用的是execute。
//成功之后,调用jobResult,建议看一下这个参数。
gp.execute(parms, jobResult);
}
function jobResult(result) {
//成功之后,将其中的结果取出来,当然这也是参数名字。
//在模型中,想要取出中间结果,需要设置为模型参数
//gp.getResultData(jobId, "polygon_Buffer", addResults);
// gp.getResultData(jobId, "resultCity", addResults);
addResults(result);
}
//将缓冲添加到地图上
//将受污染的城市,添加到地图上
function addResults(results) {
console.log(results);
var features = results[0].value.features;
for(var f = 0; f < features.length; f++)
{
var feature = features[f];
var polySymbolRed = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
new esri.symbol.SimpleLineSymbol( esri.symbol.SimpleLineSymbol.STYLE_SOLID,
new dojo.Color([98,194,204]), 2), new dojo.Color([98,194,204,0.5])
);
feature.setSymbol(polySymbolRed);
map.graphics.add(feature);
}
}
dojo.addOnLoad(Init);
</script>
</head>
<body class="tundra">
<table style="width:100%">
<tr>
<td>
<table id="navTable" width="100%">
<tbody>
<tr valign="top">
<td id="breadcrumbs">
ArcGIS JavaScript API: test
</td>
<td align="right" id="help">
使用 <a href="http://resources.esri.com/arcgisserver/apis/javascript/arcgis">ArcGIS JavaScript API</a> 构建
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
<div id="map" style="margin:auto;width:97%;border:1px solid #000;"></div>
</body>
</html>