您的位置:首页 > Web前端 > JavaScript

ArcGIS API for Javascript和GP服务调用

2014-08-12 21:16 639 查看
第一次使用ArcGIS API,也是第一次使用ArcGIS Server的GPServer的调用,遇到比较多的困难,现在记录下来。

Step1:通过ArcGIS Desktop建立自己的Model,至于如何设置Model、要将哪些内容设置为参数,如何设置得到自己想要的参数类型就需要自己探索,百度一下,也会有很全面的教程,此处不再赘述。

Step2:通过ArcGIS API for Javascript调用GPServer,步骤如下:(摘录自:ArcGIS 帮助10.1:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html

Step2.1:初始化地理处理任务。

gpTaskURL = http://localhost:6080/arcgis/rest/services/MDLInter/GPServer/interpolation;

gpTask = new esri.tasks.Geoprocessor(gpTaskURL);

//一定要设置Geoprocessor的输出空间参考

gpTask.outSpatialReference = map.spatialReference;

Step2.2:设置任务参数。

//设置任务参数,对于每一个参数如何设置,可以参考 ArcGIS 帮助10.1:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/005700000070000000/

var params
= {"Z_value_field": inputFeatures, "testinter": "aqi"};

Step2.3:运行任务。

dojo.connect(gpTask, "onJobComplete",
onTaskComplete);

dojo.connect(gpTask, "onError",
onTaskFailure
);

dojo.connect(gpTask, "onStatusUpdate",
onTaskStatus);

gpTask.submitJob(params);

function onTaskComplete(jobInfo) {

dojo.connect(gpTask, "onGetResultDataComplete",onTaskResultComplete);

gpTask.getResultData(jobInfo.jobId, "Mask");

}

function onTaskStatus(jobInfo) {

console.log(jobInfo.jobStatus);

}

function onTaskFailure(error) {

alert("Error:" + error);

}

function
onTaskResultComplete(paramResult) {

var featureSet = paramResult.value;

var taskResultLayer = new esri.layers.GraphicsLayer ({id: "MyGPSubmitJobResultLayer"});

dojo.forEach(featureset.features, function(feature) {

taskResultLayer.add(feature);

});

esri.map. map.addLayer(taskResultLayer);

}

Step2.4:渲染结果。

Step3:遇到问题

Q1:代理的问题。如我发的帖子:http://bbs.csdn.net/topics/390857135?page=1#post-397968752
A1:百度了一下,应该是设置代理出现的问题。设置代理的所有问题可以自行参考官网(https://developers.arcgis.com/javascript/jshelp/ags_proxy.html)的解说,不过解说是英文版的,英语比较挫的我还真是有点头疼。

A1.1如何得到代理所需的proxy包,Download the appropriate proxy for your platform from GitHubhttps://github.com/Esri/resource-proxy/releases).
A1.2如何使用proxy包,在下载的包中,针对不同的语言有不同的包,读取这个包下面对应的ReadMe文件,很容易了解其使用方法,本人方法如下:
A1.2.1 将java对应的包拷贝至apache tomcat的目录下,一定记得重新启动tomcat,不然很可能没有办法访问。
A1.2.2 通过浏览器访问: /Java/proxy.jsp?http://services.arcgisonline.com/ArcGIS/rest/services/?f=pjson]http://[yourmachine]/Java/proxy.jsp?http://services.arcgisonline.com/ArcGIS/rest/services/?f=pjson
A1.2.3 编辑proxy.config文件,设置自己的代理。
<serverUrls>节点下添加一个子节点<serverUrl >,设置属性url:如果你的web程序用到大于两个服务(下面"二、"说的七种服务)的话 url=http://你的IP地址/arcgis/rest/services/;如果是web程序用到一个服务的话:url=http://你的IP地址/arcgis/rest/services/MyMapService/MapServer
。如果你不是用本地的服务的话你可以不做修改(因为它里面已经有ESRI发布的相关服务的URL了)
A1.2.4 在Javascript代码中使用代理:
//下面这段代码我添加在了Step2.1代码的前面
esri.config.defaults.io.proxyUrl =
http://localhost:8080/esriproxy/proxy.jsp;
esri.config.defaults.io.alwaysUseProxy = false;//此处用true还是false请自己去查咯~

Q2:参数设置的问题
A2:我用到的是GPFeatureRecordSetLayer类型的一个变量,通过FeatureSet来传递参数,通过esri.tasks.FeatureSet(json)来设置参数(参考http://gis.jl.gov.cn/Portal/api/JS/help/jsapi/featureset.htm#FeatureSetConst2),其中json包括的内容有:

<String> displayFieldName
<Graphic[]>
features
<Object> fieldAliases
<String> geometryType
<SpatialReference>
spatialReference

Q3:Error:Unable to Opearate。
Messages:esriJobFailed


A3:根据jobStatus类型判断,发现esriJobFailed的错误,(参考http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//0057000000m4000000



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐