ArcServer关于GP的发布与应用

以制作一个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>






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值