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 GitHub(https://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)
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 GitHub(https://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)
相关文章推荐
- ArcGIS API for JavaScript开发笔记(二)GP服务REST调用
- ArcGIS API for javascript开发笔记(七)——使用ArcGIS API for javascript调用GP服务
- 基于ArcGIS API For JavaScript调用GP服务实现动态插值分析实现
- ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解
- ArcGIS API for javascript开发笔记(六)——REST详解及如何使用REST API调用GP服务
- (八)ArcGIS API For Javascript调用GP服务
- ArcGIS API for javascript开发笔记(六)——REST详解及如何使用REST API调用GP服务
- ArcGIS API for javascript开发笔记(四)——GP服务调用之GP模型的规范化制作详解
- ArcGIS API for javascript开发笔记(五)——GP服务调用之GP模型的发布及使用详解
- 如何用javascript api for arcgis调用有参数的GP服务
- ArcGIS API for javascript开发笔记(四)——GP服务调用之GP模型的规范化制作详解
- ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试
- ArcGIS API for Silverlight 调用GP服务绘制等值面
- ArcGIS API for Silverlight 调用GP服务加载等值线图层
- ArcGIS API For Javascript GP工具 Printing Tools导出地图或者打印地图(一):GP 服务Printing Tools
- ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试
- ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试
- (九)ArcGIS API For Javascript调用结果地图服务
- ArcGIS API for Silverlight 调用GP服务加载等值线图层
- ArcGIS API For Javascript之调用动态地图服务+属性、空间查询