arcgis api for javascript(一)使用自定义数据对FeatureLayer进行渲染

基于arcgis api for javascript3.17,arcgis server10.3

本文主要针对esriGeometryPolygon型(面要素)FeatureLayer中添加自定义属性列的需求。这种client端的数据修改并不会保存到server端

我们知道一般的渲染我们是通过使用FeatureLayer里的值来实现的。但经常有这样的需求,我们需要使用外部的数据(非FeatureLayer图层里自带的数据)来对某一个图层进行渲染,难道还需要我们在arcmap里重新给shp文件添加该列数据然后重新发布service吗?

比较正规的做法是开启服务的Feature Access功能。如下图

arcgis api for javascript(一)使用自定义数据对FeatureLayer进行渲染_第1张图片

但开启该功能需要在发布时指定数据库,否则会报错。详情可以百度ArcGIS server发布FeatureAccess

于是笔者首先想到了使用自定义FeatureLayer。这种自定义的FeatureLayer虽然能解决点和线的需求,但无法解决面要素的增加数据的需求,难不成你还打算在js中自定义绘制中国地图啊

自定义点或者线的FeatureLayer笔者可能会在另一篇博客中给出,当前只说明如何在面要素的FeatureLayer中增加数据。

主要实现原理:

featureLayer.graphics[i].attributes["nico"]=1;
该方法可以直接修改(或添加)FeatureLayer的属性,但这种修改只存在于client端,修改的数据不影响server端。

好的,然后贴出全部代码:




    
    
    
    
    


需要注意的事项都在代码中说明了,另外需要强调的是,FeatureLayer请一定要使用ArcGISDynamicMapServiceLayer中的FeatureLayer图层,如果是ArcGISTiledMapServiceLayer的FeatureLayer,则会产生很多的小块graphic,增加数据十分不易。

上述代码的效果图如下:

arcgis api for javascript(一)使用自定义数据对FeatureLayer进行渲染_第2张图片

然后我们看看打印的内容:

arcgis api for javascript(一)使用自定义数据对FeatureLayer进行渲染_第3张图片

显示FeatureLayer中的graphic数是34,对应中国的34个省以及直辖市。

然后输出了其中一个graphic,是青海省,我们看到了加进去的nico这一列数据,注意这一列在server端是没有的。

注意,如上所述,ArcGISTiledMapServiceLayer的FeatureLayer中的graphic数可远不止这么点,它会把整个graphic切成许多小的graphics.


以上就完成了在FeatureLayer中对每个要素自定义数据。

这种需求可以使得我们把数据保存在其他数据库中,当需要的时候取出来然后和FeatureLayer中的属性进行关联以渲染图层。

你可能感兴趣的:(arcgis,api,for,js开发)