Arcgis javascript那些事儿(十九)——地图标注添加
一、引言
一般我们做标注都是在制图的时候就做好的,直接服务已发布当作底图直接加载上去就可以了,不过最近因为提出新的需求所以要深入研究一下,需求是注记一直处于最上面的图层,不能因为添加graphiclayer而遮盖住标注,大概效果如下,字要在最上面:
二、两种解决方法
这里我找到了两种解决办法,两种方法的前提是做好annotation图层:
1、添加FeatureLayer,设置其render为透明,设置labeling为自己想要的样子
//现在require中引用TextSymbol、Color、Font等类
var textSymbol = new TextSymbol();
textSymbol.color=new Color("red");//设置标注颜色
var font=new Font("8pt",Font.STYLE_ITALIC,Font.VARIANT_NORMAL,Font.WEIGHT_BOLD,"Courier"); //设置标注字体
textSymbol.font=font;
//标注样式
var lc=new LabelClass({labelExpressionInfo:{value:"{Name}" //以"Name"属性作为标记字段},labelPlacement: "below-center" //标记位置为正下方
});
lc.symbol = textSymbol;
//设置样式
layer.setLabelingInfo([lc]);
//设置地图显示label
map = new Map("map", {basemap: "osm",center: [115.9, 28.682303711467203],showLabels : true //一定要设置为true});
这个可以满足标注在最上面的需求,但是标注大小不会随比例尺的变化而变化,这是这种方法的局限,所以有了第二种方法。
2、添加Labellayer,设置其featurelayer与render(ScaleDependentRenderer)
var annotationFeatureURL="http://"+xcyip+gisport+"/arcgis/rest/services/WWJZ/gg_annotation/MapServer/0";annotationFeaturelayer = new FeatureLayer(annotationFeatureURL,{id: "annotation",mode: FeatureLayer.MODE_SNAPSHOT,outFields: ["*"]});// create a renderer for the states layer to override default symbologyvar field="TextString";var defaultSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([142, 142, 142, 0]), 2), new Color([194,176,157,1]));var renderer = new SimpleRenderer(defaultSymbol);annotationFeaturelayer.setRenderer(renderer);// 创建多比例尺渲染var countySymbolSm = new TextSymbol().setColor("black");countySymbolSm.font=new Font("10pt", Font.STYLE_NORMAL, Font.VARIANT_NORMAL, Font.WEIGHT_BOLD, "Helvetica"); //设置标注字体var annotationRenderer5 = new SimpleRenderer(countySymbolSm);var countySymbolMed = new TextSymbol().setColor("black");countySymbolMed.font=new Font("16pt", Font.STYLE_NORMAL, Font.VARIANT_NORMAL, Font.WEIGHT_BOLD, "Helvetica"); //设置标注字体var annotationRenderer6 = new SimpleRenderer(countySymbolMed);var annotationScaleDependent = new ScaleDependentRenderer({rendererInfos: [{renderer: annotationRenderer5,minZoom: 2,maxZoom: 5},{renderer: annotationRenderer6,minZoom: 6,maxZoom: 6}]});labelLayer = new LabelLayer({id: "annotation2"});labelLayer.addFeatureLayer(annotationFeaturelayer, annotationScaleDependent, "{" + field + "}");
这种方法可以在多个比例尺下设定字体的大小,可控性强,能狗满足自定义各种需求,缺点就是必须设置featurelayer,会多添加一个图层。
后来自己想了一下可以在map的zoom事件中判断比例尺大小,然后用第一种方法中的设置labeling的方法来实现同样的效果,这样可以充分的自定义,也不会添加图层,大家可以尝试尝试==因为第二种方法在官方api中说已经不推荐了==
三、多比例尺要素渲染
这次研究这个注记显示问题还有些意外的收获,就是不同比例尺下的要素渲染,用于满足在不同比例尺下渲染方式不同的需求==
/* var countySymbolSm = new TextSymbol().setColor("black");countySymbolSm.font=new Font("10pt", Font.STYLE_NORMAL, Font.VARIANT_NORMAL, Font.WEIGHT_BOLD, "Helvetica"); //设置标注字体*/var countySymbolSm =new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([0, 142, 142, 1]), 2),new Color([194,176,0,1]));var annotationRenderer5 = new SimpleRenderer(countySymbolSm);/* var countySymbolMed = new TextSymbol().setColor("black");countySymbolMed.font=new Font("10pt", Font.STYLE_NORMAL, Font.VARIANT_NORMAL, Font.WEIGHT_BOLD, "Helvetica"); //设置标注字体*/var countySymbolMed =new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255, 142, 142, 1]), 2),new Color([194,176,255,1]));var annotationRenderer6 = new SimpleRenderer(countySymbolMed);var annotationScaleDependent = new ScaleDependentRenderer({rendererInfos: [{renderer: annotationRenderer5,minZoom: 2,maxZoom: 5},{renderer: annotationRenderer6,minZoom: 6,maxZoom: 6}]});annotationFeaturelayer.setRenderer(annotationScaleDependent);
大家可以看到很简单,就是设置好ScaleDependentRenderer之后,直接把render注入到featurelayer中就可以了。
我在查标注多比例尺渲染的时候,开始的时候我以为用这种方法也能对标注使用,写好render后直接把render注入到了labellayer,没效果,后来才发现这种渲染必须要给出渲染的field才能知道要显示的是名字还是编号,但是接口中没有,就gg了,不过以后渲染要素可以使用了,哈哈==
四、总结
- 标注显示在顶层问题提出;
- 标注添加的两种办法:featurelayer和labellayer;
- 要素多比例尺渲染
Arcgis javascript那些事儿(十九)——地图标注添加相关推荐
- Arcgis Javascript那些事儿(九)--自定义infowindow
从开始使用js API,就一直使用infowindow,最近需要自定义的时候才发现里面问题和方法还挺多的,没有android端这么清晰,最近看了些博文和官网,自己总结了方法如下: 一.继承infowi ...
- Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突
一.引言 由于项目一部分使用requirejs另一部分地图是用dojo开发(因为arcgis javascript使用的dojo),两个要和到一起,所以要求研究下如何把两者和到一起,花了两天时间看了看 ...
- Arcgis javascript那些事儿(十七)——地理编码服务的发布与使用
一.引言 地理编码是按照主要是地理位置描述与地理坐标的相互转换,主要包括地理编码与反地理编码. 地理编码指的是根据地名获取位置信息: 反地理编码指的是根据位置信息获取地名: 这个的使用我们要根据需求来 ...
- Arcgis Javascript那些事儿(十一)--网络分析服务使用
上一篇文章写了如何使用arcmap发布网络分析服务,发布的最后就是使用,下面就讲讲网络分析服务在arcgis javascript中的使用. 网络分析服务包括:最优路径分析,最近设施点分析,服务区分析 ...
- Arcgis Javascript那些事儿(七)--AMD详解
讲解arcgis中的amd知识前,首先介绍这两种Javascript模块规范:CommonJS和AMD.我主要介绍AMD,但是要先从CommonJS讲起. CommonJS 2009年,美国程序员Ry ...
- Arcgis Javascript那些事儿(六)--arcgis js API本地环境配置
最近又重新搞起arcgis javascript开发,配置环境时总结了下原来的问题: 以前在webstorm中添加一个API,用来平时在webstorm中调试,然后在自己电脑iis中再配置一个API, ...
- Arcgis javascript那些事儿(十六)——GP服务的发布与使用
一.引言 GP服务是为了弥补arcgis api的不足,提供用户自定义接口,有点类似SOE的开发,但是对编程能力要求不是很高,只需要在arcmap中创建模型发布就可以实现. GP服务主要分为两种:一. ...
- Arcgis Javascript那些事儿(十二)——geometry service几何服务
1.引言 什么是几何服务(GeometryService)?从字面意义上来说是和几何(Geometry)相关的服务,具体一点讲我们可以用这个类实现一些简单的图形操作.例如: 测量直线的距离 形状的缓冲 ...
- Arcgis javascript那些事儿(十五)——影像服务的发布与使用
一.引言 以前一直做的是矢量数据的应用,只是在铁三院实习的时候用AE进行了一些影像方面的处理,主要是获取影像中的高程来进行相关的分析. 影像服务是将栅格数据和影像数据作为服务发布出去.此时客户端便可 ...
最新文章
- 自动驾驶中可解释AI综述和未来研究方向
- css加载会造成阻塞吗?
- 用Java或Jsp向数据库存取二进制图片
- 我眼中的计算机,我眼中的计算机-计算机开机背后的故事
- 如何在 C# 中使用 Buffer
- 刚买的ubuntu服务器 为什么没有文件,新买的linux服务器怎么使用
- 【codevs30521022】多米诺覆盖,二分图
- SQL Server:CONVERT() 函数
- python写文件flush_python读写文件write和flush
- 任务调度的合理性 (25 分)(拓扑排序)
- mysql索引冲突_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
- 【CF1354C1C2】Polygon Embedding(求解包含正多边形的最小正方形)
- http虚拟主机的简单配置训练
- 物业干货:如何写一篇超赞的物业工作月报
- 嵌入式软件工程师是前端还是后端_软件开发工程师与嵌入式软件工程师有区别吗...
- 上交计算机就业报告,上海交通大学计算机研究生去向及就业情况分析
- 川普上台,VR游戏开发者也来恶搞蹭热度
- 【discuzx2】forum_index.php文件的分析
- 画质最好单机linux游戏,画质最好单机手游推荐 画质超高单机手游下载
- 华硕主板橙色灯亮无法开机
热门文章
- MTK 10A 消息机制
- 手机浏览器被强制跳转_Azure front door 强制http redirect to https
- ❤️开发项目必备技能《Git用法集合》建议收藏❤️
- linux之解决libipopt.so.1: Cannot open shared object file
- Stack Overflow监控系统内部架构初探
- SpringBoot系列(6)——使用AOP处理请求
- OpenCV探索之路(九):模板匹配
- shell命令行快捷键
- 【强化学习】表格型求解方法总结:基于表格型方法(Tabular Methods)的规划(Planning)和学习(Learning)
- php 取oracle图片,一个php导出oracle库的php代码