jsapi也有提供高亮的实现接口,但这里没用,而用的是一种改变图形(graphic)样式的思路

本文实现效果是:地图有多个面图形,当鼠标移动到面的上方,面高亮显示,鼠标移出后高亮解除

初始化

        //高亮初始化
highlightInit: function () {
//添加一个图形图层存放要高亮的图形
let layer = new this.apiInstance.GraphicsLayer({
id: "highlightLayer",
//空间参考,一般要跟地图的一样
spatialReference: this.mapView.spatialReference,
});
//图层添加到地图
this.map.add(layer); //添加两个面
let wkt = "POLYGON((113.527839 22.27028,113.527238 22.2557786,113.5437178 22.2597268,113.54423 22.2730306,113.527839 22.27028))";
let style = {
color: [50, 205, 50, 0.2],
outline: {
color: [255, 0, 0],
width: 1
}
};
let graphic = mapUtil.geometry.wktToPolygonGraphic(this.apiInstance, wkt, style, this.mapView.spatialReference, null);
layer.graphics.add(graphic); wkt = "POLYGON((113.51319 22.26819,113.51473 22.257561,113.520480 22.25747,113.519966 22.26904,113.51319 22.26819))";
graphic = mapUtil.geometry.wktToPolygonGraphic(this.apiInstance, wkt, style, this.mapView.spatialReference, null);
layer.graphics.add(graphic);
},

监听鼠标移动事件,这段代码通常在地图初始化后执行

                    //鼠标移动事件
this.mapView.on("pointer-move", function (event) {
this.mapView.hitTest(event).then(function (response) {
//鼠标移动到图形时高亮图形的实现
//原理:监听鼠标移动事件,当鼠标移动到某图形时,就改变改图形的样式(高亮实际是换一种更“亮”的样式),然后鼠标移出图形,就把图形样式恢复回去 //当前鼠标下的图形,也就是应该高亮的图形
let pointerFacilityGraphic = null; if (response.results[0]) {
//获取到当前鼠标下方的图形
var graphic = response.results[0].graphic; if (graphic.layer) {
if (graphic.layer.id === "highlightLayer") {
//当前鼠标下的图形,也就是应该高亮的图形
pointerFacilityGraphic = graphic;
}
}
} //实现高亮图形效果
if (pointerFacilityGraphic == null && this.highlightFacilityGraphic != null) {
//当鼠标下没有图形,当前有高亮图形,把当前高亮的效果去掉
this.setGraphicHighlight(this.highlightFacilityGraphic, false);
this.highlightFacilityGraphic = null;
}
else if (pointerFacilityGraphic != null && this.highlightFacilityGraphic == null) {
//当鼠标下有图形,当前没有高亮图形,把鼠标图形设为高亮
this.setGraphicHighlight(pointerFacilityGraphic, true);
this.highlightFacilityGraphic = pointerFacilityGraphic;
}
else if (pointerFacilityGraphic != null && this.highlightFacilityGraphic === pointerFacilityGraphic) {
//当鼠标下有图形,且跟当前高亮图形是同一个,不做任何事
}
else if (pointerFacilityGraphic != null && this.highlightFacilityGraphic !== pointerFacilityGraphic) {
//当鼠标下有图形,且跟当前高亮图形不同一个,把鼠标图形设为高亮,把当前高亮的效果去掉
this.setGraphicHighlight(this.highlightFacilityGraphic, false);
this.setGraphicHighlight(pointerFacilityGraphic, true);
this.highlightFacilityGraphic = pointerFacilityGraphic;
} }.bind(this))
}.bind(this));

设置图层高亮

        //设置图形高亮效果
//参数1:图形
//参数2:是否高亮
setGraphicHighlight: function (graphic, isHighlight) {
//基础样式
//本例中,正常样式的填充透明度是0.2,高亮时透明度0.7
let style = {
type: "simple-fill",
color: [50, 205, 50, 0.2],
outline: {
color: [255, 0, 0],
width: 1
}
}; if (isHighlight) {
//高亮
style.color = [50, 205, 50, 0.7];
graphic.symbol = style;
}
else {
//不高亮
style.color = [50, 205, 50, 0.2];
graphic.symbol = style;
}
},

arcgis jsapi接口入门系列(10):图形高亮的更多相关文章

  1. arcgis jsapi接口入门系列(0):总览

    开发环境: arcgis jsapi版本4.9 由于我们这套代码是基于vue,webpack开发的,会有少数vue代码,但总体不影响 里面还有些我们公司的js库和html css,给出的代码不能百分百 ...

  2. arcgis jsapi接口入门系列(2):图层基础操作

    //图层相关demo layerFun: function () { //获取地图的所有图层(不包括的图层类型:底图图层(basemaps)) let layers = this.map.layers ...

  3. arcgis jsapi接口入门系列(5):几何(点线面)基本操作

    点 point: function () { //通过wkt生成点 //wkt,代表点的坐标 let wkt = "POINT(113.566806 22.22445)"; //w ...

  4. arcgis jsapi接口入门系列(6):样式

    symbol: function () { //线样式 //样式详情请看官方文档 let style = { //线颜色,支持多种格式: //CSS color string:例如"dodg ...

  5. arcgis jsapi接口入门系列(4):用代码在地图画点线面

    PS:用代码画点这样写是为了跟后面的用鼠标画点线面区分出来 画点 drawPointGraphic: function () { //点有多种样式:一般的点,显示文字,显示图片 //一般的点 let ...

  6. arcgis jsapi接口入门系列(3):各种类型的图层添加

    这里说的tomcat切片,是指arcgis server切片后,把切片图片文件用tomcat发布(其他任意web服务器发布都行) //添加tomcat切片图层 addTomcatTileLayer: ...

  7. arcgis jsapi接口入门系列(1):地图

    地图相关 //地图相关demo mapFun: function () { //获取地图中心点 let center = this.mapView.center; //地图中心点坐标(同地图坐标系) ...

  8. arcgis jsapi接口入门系列(9):可以同时显示多个的地图popup

    jsapi有提供popup功能,但缺点很多,例如地图上只能同时显示一个popup,popup内容有限制等 本文提供另一个方法,原理不用jsapi,在地图外用一个普通的div放在地图上面,再监听地图的鼠 ...

  9. arcgis jsapi接口入门系列(8):鼠标在地图画面

    初始化,每个map执行一次 PS:画点也差不多,都是用SketchViewModel,因此本demo没有专门写画点的 drawPolygonInit: function () { //画几何对象初始化 ...

随机推荐

  1. Tensorflow基础知识

    基本知识 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

  2. Microsoft visual studio关闭安全检查

    在用Microsoft visual studio进行代码编写时,使用到列如sprintlf这种比较旧的指令,需要关闭Microsoft visual studio的安全检查: 设置预处理选项:a. ...

  3. HDU2190

    悼念512汶川大地震遇难同胞——重建希望小学 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  4. 蓝桥杯G将军

    G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加敢死 ...

  5. HDU2222(AC自动机入门题)

    Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others ...

  6. android开发中怎么通过Log函数输出当前行号和当前函数名

    public class Debug { public static int line(Exception e) { StackTraceElement[] trace = e.getStackTra ...

  7. AI—家庭组机器人平台环境配置,高级人工智能实验总结

    首先说一下我的环境:Ubuntu 12.04 32bit,  gcc 4.6.3 一,安装boost 1.48,建议用这个版本的,不然会出现兼容性问题 步骤: 其实在ubuntu下,可以用一下命令直接 ...

  8. 爬虫库之BeautifulSoup学习(五)

    css选择器: 我们在写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list 1)通过 ...

  9. c++中stl----vector

    1 vector是啥玩意 (1)可以使用下标访问个别的元素 (2)迭代器可以按照不同的方式遍历 (3)可以在容器的末尾增加或者删除元素 2 容器大小和容器的容量区别 (1)大小是元素的个数,容量是分配 ...

  10. Flutter实战视频-移动电商-42.详细页_UI主页面架构搭建

    42.详细页_UI主页面架构搭建 详细分成六大部分拆分开 body里面用FutureBuilder异步加载. FutureBuilder里面的furure属性这里用一个方法,必须返回的也是future ...