Arcgis 10.2 地理处理服务 动态修改要素数据.docx_第1页
Arcgis 10.2 地理处理服务 动态修改要素数据.docx_第2页
Arcgis 10.2 地理处理服务 动态修改要素数据.docx_第3页
Arcgis 10.2 地理处理服务 动态修改要素数据.docx_第4页
Arcgis 10.2 地理处理服务 动态修改要素数据.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Arcgis 10.2 地理处理服务 动态修改要素数据上一篇A MVC 为ArcGIS 10.2 的地理处理服务直接传送JSON数据介绍了如何用JSON转要素的地理处理服务,实现了动态创建点要素并加载到相应的地图上,但是对于线、面要素,由于动态生成时需要较大的JSON数据,这个方法就不太合适了,下面介绍另一个可行的方法,用动态的方法修改现有面要素的指定字段数据。首先还是先谈谈问题的背景,需要制作一个专题地图,用于对于各块地域的数据进行分级填色,每天都有一套数据对应有一个专题地图,同样不可能每天都制作图层和发布,因此需要图层中的数据可根据从外部数据源的查询到的数据动态的变化。好,下面就来解决这个问题。饮水思源,转载勿删:/evkchina/p/3429793.html,请支持关注北京易维清1.创建ArcGIS模型:用数据管理工具字段计算字段,设置输入表、字段名、表达式、表达式类型(采用PYTHON_9.3)和代码块,其中表达式(expressionP)和代码块(codeblockP)为模型参数,流域排放总量等级作为模型参数并勾选添加至显示。2.地理处理服务的发布在A MVC 为ArcGIS 10.2 的地理处理服务直接传送JSON数据中已经略有介绍,就不细说了。3.在javascript中使用地理处理服务:调用发布的javascript代码为,具体代码解读可以参照Arcgis官网给出的例子(/en/javascript/jssamples/gp_resultmapservice.html)。 require( dojo/dom, dojo/_base/array, dojo/date/locale, dojo/parser, dijit/registry, esri/domUtils, esri/map, esri/graphic, esri/layers/ArcGISDynamicMapServiceLayer, esri/layers/FeatureLayer, esri/tasks/Geoprocessor, esri/dijit/Legend, dijit/form/DateTextBox, dijit/layout/BorderContainer, dijit/layout/ContentPane, function (dom, array, locale, parser, registry, domUtils, Map, Graphic, ArcGISDynamicMapServiceLayer, FeatureLayer, Geoprocessor, Legend) var gpServiceUrl = http:/huang-pc:6080/arcgis/rest/services/dianchi/liuyuZL/GPServer/liuyuZL, mapserviceurl = http:/huang-pc:6080/arcgis/rest/services/dianchi/liuyuZL/MapServer/jobs, legend; parser.parse(); var map = new Map(map, basemap: satellite, center: 102.7038, 24.8270, logo: false, zoom: 11 ); var riversLayer = new ArcGISDynamicMapServiceLayer(http:/huang-pc:6080/arcgis/rest/services/dianchi/rivers/MapServer, id: rivers ); /Run the gp task when the app loads to display default incidents / map.on(load, findHotspot); function findHotspot() /cleanup any results from previous runs cleanup(); mysubmitJob(); function cleanup() /hide the legend and remove the existing hotspot layer domUtils.hide(dom.byId(legendDiv); var hotspotLayer = map.getLayer(HotspotLayer); if (hotspotLayer) map.removeLayer(hotspotLayer); map.removeLayer(map.getLayer(rivers); var jobs = 0; var jobstatus = ; var interval; function mysubmitJob() var thedate = $(#theDate).val(); var wq = $(#dataType).val(); $.ajax( type: POST, url:Url.Action(R2GISViewLYcodeblockP, Home), data:year : thedate, wq : wq, success:function (data) var codeblockp = data.codeblockP; $(#lastdate).text(当年总量累加至 + data.lastDate); var submitjoburl = gpServiceUrl + /submitJob; $.ajax( type: get, dataType: jsonp, url: submitjoburl, data: codeblockP: codeblockp, expressionP: setData ( !DSN! ), f: pjson , jsonpCallback: jsonpCallback, success: function (data) jobs = 0; if (data.jobStatus = esriJobSucceeded) doMapJob(data); else getJobStatus(data.jobId); ); ); function getJobStatus(sjobid) clearTimeout(interval); domUtils.show(dom.byId(status); if (jobs 60) var sjoburl = gpServiceUrl + /jobs/ + sjobid; $.ajax( type: get, dataType: jsonp, url: sjoburl, data: f: pjson , jsonpCallback: jsonpCallback, success: function (data) switch (data.jobStatus) case esriJobSubmitted: jobstatus = 已提交.; dom.byId(status).innerHTML = jobstatus; jobs = jobs + 1; interval = setTimeout(function () getJobStatus(data.jobId) , 1000); break; case esriJobExecuting: jobstatus = 处理中.; dom.byId(status).innerHTML = jobstatus; jobs = jobs + 1; interval = setTimeout(function () getJobStatus(data.jobId) , 1000); break; case esriJobSucceeded: clearTimeout(interval); domUtils.hide(dom.byId(status); doMapJob(data); break; case esriJobFailed: clearTimeout(interval); jobstatus = 查询失败; dom.byId(status).innerHTML = jobstatus; gpJobFailed(); ); else clearTimeout(interval); jobstatus = 查询失败; dom.byId(status).innerHTML = jobstatus; gpJobFailed(); function gpJobFailed() /domUtils.hide(dom.byId(status); function doMapJob(jobinfo) /construct the result map service url using the id from jobinfo well add a new layer to the map var mapurl = mapserviceurl + / + jobinfo.jobId; var hotspotLayer = new ArcGISDynamicMapServiceLayer(mapurl, id: HotspotLayer, opacity: 1 ); /add the hotspot layer to the map map.addLayers(hotspotLayer); map.addLayers(riversLayer); map.on(layers-add-result, function (evtObj) domUtils.show(dom.byId(legendDiv); if (!legend) /add the legend to show the resulting layer. var layerInfo = array.map(evtObj.layers, function (layer, index) return layer: layer.layer, title: 结果图层 ; ); legend = new Legend( map: map, layerInfos: layerInfo , legendDiv); legend.startup(); ); app = findHotspot: findHotspot ; return app; );其中,function mysubmitJob()中的Url.Action(R2GISViewLYcodeblockP, Home)是A MVC中的写法,是异步调用URL home/R2GISViewLYcodeblockP,返回代码块的内容,而且这里不必要使用跨域的写法,一般ajax异步就可以,方法代码如下public ActionResult R2GISViewLYcodeblockP(int year, string wq) var codeblockp = new LiuYUData().getZLData(year, wq); JsonResult jsonData = new JsonResult Data = codeblockp ; return Json(jsonData.Data); 另外,代码块内容(string)的生成代码为,强调一下,经过实践,这里面的空格对代码块的影响比较大,可能是PYTHON_9.3的问题,需要大家严重注意。public LYData getZLData(int year, string wq) var lydata = new LYData(); lydata.lastDate = (无数据累加); string zldata = ; var zls = db.R2_WQs.Where(m = m.DateTime.Value.Year = year & m.Object = wq + 年总量).ToList(); if (zls.Count 0) zldata = def setData ( dsn ):n; foreach (var zl in zls) zldata = zldata + if dsn = + + zl.DSNID.Substring(0, zl.DSNID.Length - 2) + :n + return + zl.ZLWarn.ToString() + n; zldata = zldata + else:n return 0; lydata.codeblockP = zldata; lydata.lastDate = zls0.DateTime.Value.ToString(yyyy年MM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论