vue+openlayers在地图添加图标

参考帖子:https://blog.csdn.net/feiteyizu/article/details/81133845
有两种方式,介绍第二种,第一种太简单,,而且不能动态增加dom元素从而添加图标,也就是说,如果使用上述帖子的第一种方式,你需要加几个图标,就需要提前预定好多少个图标对应的dom元素,而且未被使用的图标会显示在地图下面,地图会被撑变形,需求如果只是添加一两个图标,且是固定的,可以参考第一种方式,相对而言,第一种能简单点

首先是地图的初始化,参考上篇帖子,很详细了,使用的是Tomcat虚拟目录添加离线地图

https://blog.csdn.net/u013772906/article/details/96429589
下面是是添加图标的代码:

上代码
// 需要提前import的类
// 图上图标相关
import OlFeature from 'ol/Feature'
import OlGeomPoint from 'ol/geom/Point'
import OlLayerVector from 'ol/layer/Vector'
import OlSourceVector from 'ol/source/Vector'
import OlStyleStyle from 'ol/style/Style'
import OlStyleIcon from 'ol/style/Icon'
// 用来添加相关文字描述的
import Text from 'ol/style/Text' 
import Fill from 'ol/style/Fill'

// 添加图标的方法
addIconMarker(map) {
      var startMarker = new OlFeature({
        type: 'icon',
        geometry: new OlGeomPoint([118.10131072998047, 36.819305419921875])
      })

      var vectorLayer = new OlLayerVector({
        source: new OlSourceVector({
          features: [startMarker]
        }),
        style: new OlStyleStyle({
          image: new OlStyleIcon({
            anchor: [0.5, 1],
            src: window.location.origin + window.location.pathname + 'static/mapMoniter/0.png'
            // src: http://192.168.4.61:9527/static/mapMoniter/0.png
            // 说明下,因为vue项目打包之后,我这张图片放到了static目录下,直接给相对路径是无法访问到,
            // 可以通过js原生的API拿到对应的前台服务器ip和端口,还有项目名称,就可以访问到,下面附了对应帖子链接
          }),
          // 设置图片下面显示字体的样式和内容
          text: new Text({
            text: '文字描述'// 添加文字描述
            font: '14px font-size', // 设置字体大小
            fill: new Fill({// 设置字体颜色
              color: '#1CAF9A'
            }),
            offsetY: 10// 设置文字偏移量
          })
        })
      })
      map.addLayer(vectorLayer)
    }

实现效果(文字描述部分,我这边是动态加的,参考效果)
在这里插入图片描述

动态加载静态资源图标那块,可以参考如下帖子vue打包之后无法访问相对路径的图片
具体的类说明可以参考openlayers官网的API,里面有关于vue的用法和调用方式,我就不赘述了,上面描述的也比我详尽很多

Fill对应的API:https://openlayers.org/en/latest/apidoc/module-ol_style_Fill-Fill.html
截图如下
在这里插入图片描述
另外附一个点击对应图标,获取到这个feature(图标)的方法

// 监听singleclick事件,通过点击事件,获取对应点的feature图标
  map.on('singleclick', function(e) {
	console.log(e.coordinate)
	if (map.hasFeatureAtPixel(e.pixel)) {
	  var feature = map.getFeaturesAtPixel(e.pixel)
	}
  })
地图绑定的事件是单击事件,e.coordinate,对应的是点击地图点的经纬度,获取图标需要用e.pixel这个参数来获取
返回的feature就是对应你点击地方的图标的对象了
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值