ArcGIS JS版本 ArcGIS JS 4.11

最近做一个地图服务,通过FeatureLayer.applyEdits()方法,更新唯一值的渲染字段,实现地图渲染根据用户的配置实时更新。

由于ArcGIS JS自带的编辑Widget效果不好,自己做了一个更新弹窗,applyEdits之后,发现该地图符号不会自动更新,需要地图视图稍微变化一点,才会刷新成最新的渲染

查询了官网API,发现ArcGIS JS无对FeatureLayer中某个Feature的渲染进行刷新的方法,无奈只能调用FeatureLayer.refresh()方法刷新整个图层。

可执行完之后,发现并没有实现地图渲染的刷新。

最初的核心代码

添加矢量图层代码

            var layerW = new MapImageLayer({
url: mapServerUrl,
opacity: 0.7
});
map.add(layerW); // adds the layer to the map

弹出更新Form代码 注:其中showModal为一个弹出bootstrap Modal对象的方法

此处的FeatureLayer是通过具体的图层名称,去重新实例化的对象

var popup = view.popup;
// var editFeature=null;
popup.viewModel.on("trigger-action", function(event) {
var ftlyr=null;
// editFeature=popup.viewModel.selectedFeature; var lyc = getLyrConfigByLyrId(event.action.id);
ftlyr= new FeatureLayer({
url:FeatureServerUrl+lyc.id
}); var oid = popup.viewModel.selectedFeature.attributes["OBJECTID"];
editFeature=selectFeature(ftlyr,oid);
// 根据Guid 和action id弹出相关编辑界面,并提交流程状态/备份等
var attributes = popup.viewModel.selectedFeature.attributes;
if(lyc.id==1){
//一事一办
var data={};
data.State=attributes["完成情况"];
data.Summary = attributes["备注"];
showModal({
ModalName:"Ysyb",
Mode:"edit",
PstUrl:"#",
Data:data,
Title:"一事一办项目上报",
submitHandler:function () {
editFeature.attributes["State"]=$("#YsybForm select[name='State']").val()
editFeature.attributes["Summary"]=$("#YsybForm textarea[name='Summary']").val();
const edits = {
updateFeatures: [editFeature]
}; applyAttributeUpdates(ftlyr,edits);
}
});
}

属性更新代码

function applyAttributeUpdates(ftlyr,params) {
dom.byId("viewDiv").style.cursor = "progress";
ftlyr.applyEdits(params).then(function(editsResult) {
// Get the objectId of the newly added feature.
// Call selectFeature function to highlight the new feature.
if (editsResult.addFeatureResults.length > 0) {
const objectId = editsResult.addFeatureResults[0].objectId;
selectFeature(ftlyr,objectId);
}
if(editsResult.updateFeatureResults.length > 0){
unselectFeature();
const objectId = editsResult.updateFeatureResults[0].objectId;
ftlyr.refresh();
$.notify({message:"更新成功"},{type:"success"});
}
dom.byId("viewDiv").style.cursor= "auto";
})
.catch(function(error) {
console.log("===============================================");
console.error(
"[ applyEdits ] FAILURE: ",
error.code,
error.name,
error.message
);
console.log("error = ", error);
dom.byId("viewDiv").style.cursor = "auto";
});
}

查询N多资料,走了N多弯路之后,最后找到了问题所在。

由于该功能中,map没有直接添加FeatureLayer图层,图层的展示是通过MapImageLayer的方式添加的,该MapImageLayer包含对个FeatureLayer图层。

而在更新要素属性的时候,获取到具体的FeatureLayer调用其refresh()方法,推测应该为用于applyEdits()的FeatureLayer并不是当前地图用于展示的图层,

所以调用其刷新是没有效果的。

所以,调用当前map的MapImageLayer的refresh()方法,即可实现地图渲染的刷新。

ArcGIS JS之 applyEdits之后要素符号更新的更多相关文章

  1. 基于ArcGIS JS API的在线专题地图实现

    0 引言     专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...

  2. ArcGIS JS 学习笔记1 用ArcGIS JS 实现仿百度地图的距离量测和面积量测

    一.开篇 在博客注册了三年,今天才决定写第一篇博客,警告自己不要懒!!! 二.关于ArcGIS JS 版本选择 在写这篇博客时ArcGIS JS 4.0正式版已经发布.它和3.x版本的不同是,Map不 ...

  3. ArcGIS JS API使用PrintTask打印地图问题解决汇总

    环境:来源于工作过程,使用的API是  arcgis js 3.*  3系API,4.*暂时没测试: 1.数据与打印服务跨域情况下,不能打印问题. 一般情况下,我们发布的数据服务和打印服务是在一台服务 ...

  4. ArcGIS JS 学习笔记3 实现百度风格的BubblePopup

    1. 开篇 模仿是最好的学习,这次我们继续山寨百度,通过自定义Infowindow来实现百度风格的BubblePopup 2.准备 2.1 Copy模板 先打开百度地图,按下f12吧BubblePop ...

  5. ArcGIS AO开发高亮显示某些要素

    参考代码1 ifeaturecursor pcur = ifeatureclass.search(iqueryfilter pfilter); pfilter.whereclause = strAdd ...

  6. js移除最后一个字符,js替换字符串的连接符号,js移除最后一个分隔符号

    js移除最后一个字符 js移除最后一个分隔符号 js替换字符串的连接符号 >>>>>>>>>>>>>>>> ...

  7. ArcGIS JS Demo

    最近在用 ArcGIS 写了一个Demo 效果如下: 1. 引用 ArcGIS JS API arcgis_js_api/init.js 2. 引用 样式 arcgis_js_api/js/esri/ ...

  8. geoserver图层属性查询及查询结果转换为arcgis js api能使用的格式

    一个项目使用了ArcGIS JS API开发GIS展示层,但GIS服务使用了Geoserver,这时加载Geoserver数据和查询数据就和之前完全不一样了,以下介绍下我使用ArcGIS JS API ...

  9. ArcGIS JS 3.x使用webgl绘制热力图

        ArcGIS Js Api 3.x 热力图在数据量达到三万左右的时候,绘制速度不尽人意,数据量再大些,缩放时候就会很卡,非常影响客户体验.     参考了一下网上webgl热力图,能达到更流畅 ...

随机推荐

  1. Android 9.0 Http不能访问网络

    最近在做公司产品,一期完成,打包给测试,然后....一台手机连服务器都访问不了看日志如下: UnityWebRequest返回code:0,显示Unknow error 服务器接口是http://非域 ...

  2. CRM 公海 回收规则 AI

    7.3.2 客户和公海管理 · 纷享销客产品手册 https://www.fxiaoke.com/mob/guide/crmdoc/src/7-3-2%E5%AE%A2%E6%88%B7%E5%92% ...

  3. Spark获取DataFrame中列的几种姿势--col,$,column,apply

    1.doc上的解释(https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/sql/Column.html)  df("c ...

  4. pytorch设置多GPU运行的方法

    1.DataParallel layers (multi-GPU, distributed) 1)DataParallel CLASS torch.nn.DataParallel(module, de ...

  5. zookeeper使用过程的错误

    一.zookeeper启动成功,dubbo服务也注册成功,但是服务消费者调用失败 报错如下: [myid:] - INFO [SyncThread:0:ZooKeeperServer@645] - E ...

  6. Spring cloud微服务安全实战-6-1本章概述

    这一章来讲一下,微服务之间的通讯安全. 当前这个架构还存在的问题 在网关上做限流还是有一些问题的.例如我的订单服务限流是100,库存服务限流也是100.但是我的订单服务会调用我的库存服务.那么在网关这 ...

  7. 如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘

    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘  摘自:http://blog.sina.com.cn/s/blog_7525b71f0101d0u8.html ...

  8. [ kvm ] 学习笔记 8:Ovirt 基础及使用

    目录- 1. oVirt 功能介绍- 2. oVirt 安装部署    - 2.1 基础准备    - 2.2 安装 ovirt-engine    - 2.3 配置 kvm 主机    - 2.4 ...

  9. POJ Corn Fields 状态压缩DP基础题

    题目链接:http://poj.org/problem?id=3254 题目大意(名称什么的可能不一样,不过表达的意思还是一样的): 种玉米 王小二从小学一年级到现在每次考试都是班级倒数第一名,他的爸 ...

  10. 【JS新手教程】replace替换一个字符串中所有的某单词

    JS中的replace方法可以替换一个字符串中的单词.语句的格式是: 需要改的字符串.replace(字符串或正则表达式,替换成的字符串) 如果第一个参数用字符串,默认是找到该字符串中的第一个匹配的字 ...