AGS JS开发-以JSON参数构建地图渲染之四

使用SVG图标符号

1.环境说明

ArcGIS 10.4.1

JS API 3.15

2.SVG图标介绍

SVG是使用XML来描述二维图形和绘图程序的语言。可以用来定义用于网络的矢量图形。相比JPEG、PNG等图像,SVG尺寸更小,且可以放大,修改颜色等优势。

SVG预定义了常用的几种形状元素,包括<rect>、<circle>、<ellipse>、<line>、<polyline>、<polygon>、<path>。其中<path>可以理解为可创建任何的自定义图标。通常使用这些元素标签来定义图形,然后保存为.svg文件,该文件可与HTML一起使用。

3.SVG图标制作

SVG图标可使用现成的工具来生成,或者搜索网上提供的免费图标。

(1)在线制作工具

www.zhangxinxu.com/sp/svg/

(2)免费SVG图标

icomoon.io/app/#/select

4.点符号使用SVG图标介绍

JSAPI中的SimpleMarkerSymbol支持使用SVG中定义的图标。因此第一步需要先获取SVG图标path的定义,可使用前述方法获取。

这里介绍的JS API使用SVG图标的方式,还是按前面思路,使用JSON来定义,其JSON格式定义如下:

{

"color": [49, 45, 182, 255],

"size": 12,

"type": "esriSMS",

"style": "esriSMSPath",

"path": "svg中path定义的值"

}

5.结合分级渲染和SVG图标符号测试

(1)构建SVG图标符号

var svgPath1="M16

0c-5.523 0-10 4.477-10 10 0 10 10 22 10 22s10-12

10-22c0-5.523-4.477-10-10-10zM16 16.125c-3.383

0-6.125-2.742-6.125-6.125s2.742-6.125 6.125-6.125 6.125 2.742 6.125 6.125-2.742

6.125-6.125 6.125zM12.125 10c0-2.14 1.735-3.875 3.875-3.875s3.875 1.735 3.875

3.875c0 2.14-1.735 3.875-3.875 3.875s-3.875-1.735-3.875-3.875z";

var svgJson1= {

"color": [255,165,0,255],

"size":18,

"type":"esriSMS",

"style":"esriSMSPath",

"path":svgPath1

};

(2)在分级渲染中使用SVG图标符号

//创建分级渲染JSON,点符号function createClassbreakRendererJson(classbreakFieldName,classbreakValues,classbreakSymbols){

var rendererJson= {

"type":"classBreaks",

"field": classbreakFieldName,

"defaultSymbol": {

"color": [128,128,128],

"size":12,

"type":"esriSMS",

"style":"esriSMSCircle"},

"minValue": classbreakValues[0],

"classBreakInfos": []

};

var i=1;

for(i;i<classbreakValues.length;i++){

var obj= {

"classMaxValue": classbreakValues[i],

"symbol": classbreakSymbols[i]

};

rendererJson.classBreakInfos.push(obj);

}

return rendererJson;

}

var svgPath1="M16 0c-5.523 0-10 4.477-10 10 0 10 10 22 10 22s10-12 10-22c0-5.523-4.477-10-10-10zM16 16.125c-3.383 0-6.125-2.742-6.125-6.125s2.742-6.125 6.125-6.125 6.125 2.742 6.125 6.125-2.742 6.125-6.125 6.125zM12.125 10c0-2.14 1.735-3.875 3.875-3.875s3.875 1.735 3.875 3.875c0 2.14-1.735 3.875-3.875 3.875s-3.875-1.735-3.875-3.875z";

var svgJson1= {

"color": [255,165,0,255],

"size":18,

"type":"esriSMS",

"style":"esriSMSPath",

"path":svgPath1

};

var svgPath2="M32 7.075c-1.175 0.525-2.444 0.875-3.769 1.031 1.356-0.813 2.394-2.1 2.887-3.631-1.269 0.75-2.675 1.3-4.169 1.594-1.2-1.275-2.906-2.069-4.794-2.069-3.625 0-6.563 2.938-6.563 6.563 0 0.512 0.056 1.012 0.169 1.494-5.456-0.275-10.294-2.888-13.531-6.862-0.563 0.969-0.887 2.1-0.887 3.3 0 2.275 1.156 4.287 2.919 5.463-1.075-0.031-2.087-0.331-2.975-0.819 0 0.025 0 0.056 0 0.081 0 3.181 2.263 5.838 5.269 6.437-0.55 0.15-1.131 0.231-1.731 0.231-0.425 0-0.831-0.044-1.237-0.119 0.838 2.606 3.263 4.506 6.131 4.563-2.25 1.762-5.075 2.813-8.156 2.813-0.531 0-1.050-0.031-1.569-0.094 2.913 1.869 6.362 2.95 10.069 2.95 12.075 0 18.681-10.006 18.681-18.681 0-0.287-0.006-0.569-0.019-0.85 1.281-0.919 2.394-2.075 3.275-3.394z";

var svgJson2= {

"color": [30,144,255,255],

"size":14,

"type":"esriSMS",

"style":"esriSMSPath",

"path":svgPath2

};

var citiesUrl="https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer/0";

var citiesLayer=new FeatureLayer(citiesUrl,{

outFields: ["*"]

});

var classbreaksRenderer=new ClassBreaksRenderer(createClassbreakRendererJson("pop2000",[10000,50000,200000],["",svgJson1,svgJson2]));

citiesLayer.setRenderer(classbreaksRenderer);

map.addLayer(citiesLayer);

效果:


6.源码

使用SVG图标符号

7.参考资料

[1]使用SVG中的Symbol元素制作Icon(https://isux.tencent.com/16292.html)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,227评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,755评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,899评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,257评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,617评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,757评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,982评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,715评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,454评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,666评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,148评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,512评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,156评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,112评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,896评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,809评论 2 279
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,691评论 2 272

推荐阅读更多精彩内容

  • 油炸藕片的制作步骤: 第一步:莲藕洗净削皮。 第二步:把藕切成均匀的薄片,加入生抽调味。 第三步:调制面糊:面粉加...
    六个太阳金阅读 312评论 0 1
  • 对于一个喜欢看书,然而看过之后就如风拂过面,不曾留下什么记忆的人来讲,只是看,没有什么长进。希望自己能够写出清晰的...
    史终成长阅读 186评论 0 0
  • 她在见到他的时候是在学校的操场上,微风拂面却没有带来一丝清凉。她不敢靠近他因为他们早就分手了。路过的时候她发现他的...
    f31c46275894阅读 141评论 0 1