一、引言

一般我们做标注都是在制图的时候就做好的,直接服务已发布当作底图直接加载上去就可以了,不过最近因为提出新的需求所以要深入研究一下,需求是注记一直处于最上面的图层,不能因为添加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那些事儿(十九)——地图标注添加相关推荐

  1. Arcgis Javascript那些事儿(九)--自定义infowindow

    从开始使用js API,就一直使用infowindow,最近需要自定义的时候才发现里面问题和方法还挺多的,没有android端这么清晰,最近看了些博文和官网,自己总结了方法如下: 一.继承infowi ...

  2. Arcgis javascript那些事儿(二十)——dojo中djconfig配置、dojo与requirejs项目冲突

    一.引言 由于项目一部分使用requirejs另一部分地图是用dojo开发(因为arcgis javascript使用的dojo),两个要和到一起,所以要求研究下如何把两者和到一起,花了两天时间看了看 ...

  3. Arcgis javascript那些事儿(十七)——地理编码服务的发布与使用

    一.引言 地理编码是按照主要是地理位置描述与地理坐标的相互转换,主要包括地理编码与反地理编码. 地理编码指的是根据地名获取位置信息: 反地理编码指的是根据位置信息获取地名: 这个的使用我们要根据需求来 ...

  4. Arcgis Javascript那些事儿(十一)--网络分析服务使用

    上一篇文章写了如何使用arcmap发布网络分析服务,发布的最后就是使用,下面就讲讲网络分析服务在arcgis javascript中的使用. 网络分析服务包括:最优路径分析,最近设施点分析,服务区分析 ...

  5. Arcgis Javascript那些事儿(七)--AMD详解

    讲解arcgis中的amd知识前,首先介绍这两种Javascript模块规范:CommonJS和AMD.我主要介绍AMD,但是要先从CommonJS讲起. CommonJS 2009年,美国程序员Ry ...

  6. Arcgis Javascript那些事儿(六)--arcgis js API本地环境配置

    最近又重新搞起arcgis javascript开发,配置环境时总结了下原来的问题: 以前在webstorm中添加一个API,用来平时在webstorm中调试,然后在自己电脑iis中再配置一个API, ...

  7. Arcgis javascript那些事儿(十六)——GP服务的发布与使用

    一.引言 GP服务是为了弥补arcgis api的不足,提供用户自定义接口,有点类似SOE的开发,但是对编程能力要求不是很高,只需要在arcmap中创建模型发布就可以实现. GP服务主要分为两种:一. ...

  8. Arcgis Javascript那些事儿(十二)——geometry service几何服务

    1.引言 什么是几何服务(GeometryService)?从字面意义上来说是和几何(Geometry)相关的服务,具体一点讲我们可以用这个类实现一些简单的图形操作.例如: 测量直线的距离 形状的缓冲 ...

  9. Arcgis javascript那些事儿(十五)——影像服务的发布与使用

    一.引言 以前一直做的是矢量数据的应用,只是在铁三院实习的时候用AE进行了一些影像方面的处理,主要是获取影像中的高程来进行相关的分析.  影像服务是将栅格数据和影像数据作为服务发布出去.此时客户端便可 ...

最新文章

  1. 自动驾驶中可解释AI综述和未来研究方向
  2. css加载会造成阻塞吗?
  3. 用Java或Jsp向数据库存取二进制图片
  4. 我眼中的计算机,我眼中的计算机-计算机开机背后的故事
  5. 如何在 C# 中使用 Buffer
  6. 刚买的ubuntu服务器 为什么没有文件,新买的linux服务器怎么使用
  7. 【codevs30521022】多米诺覆盖,二分图
  8. SQL Server:CONVERT() 函数
  9. python写文件flush_python读写文件write和flush
  10. 任务调度的合理性 (25 分)(拓扑排序)
  11. mysql索引冲突_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
  12. 【CF1354C1C2】Polygon Embedding(求解包含正多边形的最小正方形)
  13. http虚拟主机的简单配置训练
  14. 物业干货:如何写一篇超赞的物业工作月报
  15. 嵌入式软件工程师是前端还是后端_软件开发工程师与嵌入式软件工程师有区别吗...
  16. 上交计算机就业报告,上海交通大学计算机研究生去向及就业情况分析
  17. 川普上台,VR游戏开发者也来恶搞蹭热度
  18. 【discuzx2】forum_index.php文件的分析
  19. 画质最好单机linux游戏,画质最好单机手游推荐 画质超高单机手游下载
  20. 华硕主板橙色灯亮无法开机

热门文章

  1. MTK 10A 消息机制
  2. 手机浏览器被强制跳转_Azure front door 强制http redirect to https
  3. ❤️开发项目必备技能《Git用法集合》建议收藏❤️
  4. linux之解决libipopt.so.1: Cannot open shared object file
  5. Stack Overflow监控系统内部架构初探
  6. SpringBoot系列(6)——使用AOP处理请求
  7. OpenCV探索之路(九):模板匹配
  8. shell命令行快捷键
  9. 【强化学习】表格型求解方法总结:基于表格型方法(Tabular Methods)的规划(Planning)和学习(Learning)
  10. php 取oracle图片,一个php导出oracle库的php代码