arcgis api對(duì)FeatureLayer自定義渲染

地圖服務(wù)一般僅提供地圖展示的基礎(chǔ)信息秀睛,如果需要根據(jù)外部數(shù)據(jù)來(lái)渲染圖層耀里,怎么辦呛每?例如:通過(guò)不同的顏色來(lái)表示河道或道路的擁堵情況扁掸。本文將通過(guò)實(shí)現(xiàn)對(duì)河段擁堵情況展示一例來(lái)講述FeatureLayer的自定義渲染。

實(shí)現(xiàn)思路

  • FeatureLayer添加自定義屬性(Field)
  • 通過(guò)FeatureLayer自定義屬性來(lái)渲染圖層

加載河道FeatureLayer:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" >
<link rel="stylesheet" >
<script src="http://192.168.2.118:8484/arcgis_js_api/library/3.20/3.20/init.js"></script>
<title>要素圖層</title>
<script type="text/javascript">
require([
         "esri/map",
         "esri/layers/FeatureLayer",
         "esri/renderers/SimpleRenderer",  
         "esri/Color",  
         "esri/symbols/SimpleFillSymbol",  
         "esri/symbols/SimpleLineSymbol",
         "dojo/domReady!"
       ], function(
            Map,FeatureLayer,SimpleRenderer,Color,SimpleFillSymbol,SimpleLineSymbol
       ){
         map= new Map("map",{
               //去掉logo
               logo:false,
               zoom:5
         });
         //京杭運(yùn)河要素圖層
         var url="http://124.128.48.217:6080/arcgis/rest/services/shuili/MapServer/6";
         var sk_layer = new FeatureLayer(url,{
             //注意這里的mode一定要指定MODE_SNAPSHOT诺擅,否則每次放大或縮小或者是平移都會(huì)執(zhí)行FeatureLayer的update-end操作
             mode: FeatureLayer.MODE_SNAPSHOT,
             //輸出所有屬性
             outFields: ["*"]
         });
         //添加圖層
         map.addLayer(sk_layer);
         
         sk_layer.on("update-end", function(){
                //輸出graphic(線要素)的所有屬性
                 for(var i = 0;i<sk_layer.graphics.length;i++){
                     //輸出要素屬性
                     console.log(sk_layer.graphics[i].attributes);
                     //輸出要素類型
                     console.log(sk_layer.geometryType);
                     
                 }
         });
   });
</script>
</head>
<body>
    <div id="map" style="width: 100%;height:450px;border: 1px blue solid;">
    
    </div>
</body>
</html>
河道原始圖.png

FeatureLayer添加自定義屬性(Field)

  • 打印圖層屬性
//圖層更新結(jié)束事件打印圖層屬性
sk_layer.on("update-end", function(){
                //輸出graphic(線要素)的所有屬性
                 for(var i = 0;i<sk_layer.graphics.length;i++){
                     //輸出要素屬性
                     console.log(sk_layer.graphics[i].attributes);
                     //輸出要素類型
                     console.log(sk_layer.geometryType);
                     
                 }
         });

河道基礎(chǔ)屬性.png

FeatureLayer添加自定義屬性主要原理

featureLayer.graphics[i].attributes["屬性名"]=屬性值;

注意:該方法可以直接修改(或添加)FeatureLayer的屬性市袖,但這種修改只存在于client端,修改的數(shù)據(jù)不影響server端掀虎。

添加自定義屬性凌盯,關(guān)鍵代碼:

//yd_array用于存儲(chǔ)OBJECTID與擁堵級(jí)別
         var yd_array = new Array();
         yd_array.push([1,1]);
         yd_array.push([2,2]);
         yd_array.push([3,3]);
         yd_array.push([4,4]);
         yd_array.push([5,5]);
         
         sk_layer.on("update-end", function(){
                //輸出graphic(線要素)的所有屬性
                 for(var i = 0;i<sk_layer.graphics.length;i++){
                        for(var j=0;j<yd_array.length;j++){
                         if(sk_layer.graphics[i].attributes["OBJECTID"] == yd_array[j][0]){
                            //添加自定義的航道擁堵屬性并賦值
                             sk_layer.graphics[i].attributes["yd_level"]=yd_array[j][1];
                         }
                     }
                     //輸出要素屬性
                     console.log(sk_layer.graphics[i].attributes);
                 }
         });
  • 打印添加自定義屬性后的圖層屬性


    自定義屬性打印.gif

自定義渲染FeatureLayer

關(guān)鍵代碼:

sk_layer.on("update-end", function(){
                //輸出graphic(線要素)的所有屬性
                 for(var i = 0;i<sk_layer.graphics.length;i++){
                        for(var j=0;j<yd_array.length;j++){
                         if(sk_layer.graphics[i].attributes["OBJECTID"] == yd_array[j][0]){
                            //添加自定義的航道擁堵屬性并賦值
                             sk_layer.graphics[i].attributes["yd_level"]=yd_array[j][1];
                         }
                     }
                     //輸出要素屬性
                     console.log(sk_layer.graphics[i].attributes);
                    /*根據(jù)擁堵級(jí)別渲染航道*/
                     if(sk_layer.graphics[i].attributes["yd_level"] == 1){
                         map.lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 128, 0,1]),2.5);
                         sk_layer.graphics[i].setSymbol(map.lineSymbol);
                     }
                     if(sk_layer.graphics[i].attributes["yd_level"] == 2){
                         map.lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([65, 105, 225,1]),2.5);
                         sk_layer.graphics[i].setSymbol(map.lineSymbol);
                     }
                     if(sk_layer.graphics[i].attributes["yd_level"] == 3){
                         map.lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 255, 0,1]),2.5);
                         sk_layer.graphics[i].setSymbol(map.lineSymbol);
                     }
                     if(sk_layer.graphics[i].attributes["yd_level"] == 4){
                         map.lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 165, 0,1]),2.5);
                         sk_layer.graphics[i].setSymbol(map.lineSymbol);
                     }
                     if(sk_layer.graphics[i].attributes["yd_level"] == 5){
                         map.lineSymbol=new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 69, 0,1]),2.5);
                         sk_layer.graphics[i].setSymbol(map.lineSymbol);
                     }
                 }
         });

最終效果:


自定義渲染效果.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末付枫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子驰怎,更是在濱河造成了極大的恐慌阐滩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件县忌,死亡現(xiàn)場(chǎng)離奇詭異掂榔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)症杏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)装获,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人厉颤,你說(shuō)我怎么就攤上這事穴豫。” “怎么了逼友?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵精肃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帜乞,道長(zhǎng)司抱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任黎烈,我火速辦了婚禮习柠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘照棋。我一直安慰自己资溃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布烈炭。 她就那樣靜靜地躺著肉拓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梳庆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天卑惜,我揣著相機(jī)與錄音膏执,去河邊找鬼。 笑死露久,一個(gè)胖子當(dāng)著我的面吹牛更米,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毫痕,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼征峦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼迟几!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起栏笆,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤类腮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蛉加,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚜枢,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年针饥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了厂抽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丁眼,死狀恐怖筷凤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苞七,我是刑警寧澤藐守,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站莽鸭,受9級(jí)特大地震影響吗伤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硫眨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一足淆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧礁阁,春花似錦巧号、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至棚品,卻和暖如春靠欢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铜跑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工门怪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锅纺。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓掷空,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坦弟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 第二章 使用ArcPy編寫(xiě)腳本 ||| 第四章 查找和修復(fù)數(shù)據(jù)源 我們將在本章介紹以下案例: 引用當(dāng)前地圖文檔 引...
    muyan閱讀 14,570評(píng)論 19 23
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理护锤,服務(wù)發(fā)現(xiàn),斷路器酿傍,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,849評(píng)論 25 707
  • 第七章 創(chuàng)建自定義地理處理工具 ||| 第九章 ArcPy數(shù)據(jù)訪問(wèn)模塊 我們將在本章中介紹以下案例: 構(gòu)建正確的屬...
    muyan閱讀 16,505評(píng)論 7 12
  • 文:筱竹 沒(méi)有封面的書(shū)卷 遺落在 浩茫的沙漠 芨芨草的戈灘 任時(shí)間的咒語(yǔ) 將它深深地塵封 朝陽(yáng)與流云顧盼 似瞧見(jiàn) ...
    丹菡閱讀 457評(píng)論 9 18