arcgis for js 3.X 修改featurelayer的graphic

Posted 左直拳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arcgis for js 3.X 修改featurelayer的graphic相关的知识,希望对你有一定的参考价值。

featurelayer,要素图层/属性图层,里面充满了一个个的graphic对象。咱们可以在客户端构建一个featurelayer(featurelayer是graphicslayer的子类),然后在上面任意作画。

画的图形一多,就会有性能的问题。据说这是arcgis for jsapi3的专利,最多只能支持几千个graphic,而且渲染的速度还很慢;4的话就好很多了,用webgl绘制,贼快;据说还能直接将数据赋给featurelayer,让它自己渲染。也就是说,假设数据变了,直接丢给featurelayer,无须指导它一个个怎么重画。

但是!4.10有好多坑;所以我们又改回了3.27。呵呵,一切从头再来,收拾旧河山,朝天阙。雄鸡一声撅一撅;雄鸡二声撅二撅;三声唤出夏桑菊,扫退火气与眼屎。

总结一下:

一、批量更新graphic对象
在featurelayer上添加、修改、删除graphic对象,如果数量很多,最好是调用它这个方法:

applyEdits(adds?, updates?, deletes?, callback?, errback?)

已经测试过了,我们构造一个graphic对象,这只是在内存上操作而已,只要还没featurelayer.add(graphic),地图上就还没生效。但是,你add吧,地图就会更新;如果成千上万个地add,就意味着刷新成千上万次,就会很慢了。
但用这个applyEdits的话,它应该是只刷新一次。
有关这个applyEdits,它可以用在手动构建的featurelayer上。

二、如何更换graphic对象
想当然地,将原来的graphic对象remove,然后再画一个。
拿衣服!愚不可及!
可以酱紫:

//g,newg都是graphic对象
//gemoetry是几何对象,即几何形状、坐标等等
//symbol,外形
newg.attributes.OBJECTID = g.attributes.OBJECTID;//假设OBJECTID是主键,要保留
g = g.setGeometry(newg.geometry).setSymbol(newg.symbol).setAttributes(newg.attributes);

以上是关于arcgis for js 3.X 修改featurelayer的graphic的主要内容,如果未能解决你的问题,请参考以下文章

arcgis for js 3.X 空气泡问题

arcgis api for js 3.X版本加载矢量json文件,并缩放至图层

纯C#,读取shp文件转json,arcgis api for js 3.x可加载

arcgis for js 3.X通用百变气泡解决方案

在arcgis api for js中能修改百度地图的样式吗

304Arcgis_for_js热力图4.21(03)