vue3 南京地图开放平台 地图中绘制先并给线添加点击事件

vue yekong

vue3 项目开发过程中需要渲染地图,并在地图中绘制线条,线条要可以点击,触发弹窗,这里我们使用的是南京地图开放平台

vue3 南京地图开放平台 地图中绘制先并给线添加点击事件

首先引入依赖

在index.html中引入以下文件。

<link rel="stylesheet" href="//mapservices.njghzy.com.cn:84/njapis/njmaps/mapbox/css/mapbox-gl.css">
<script type="text/javascript" src="//mapservices.njghzy.com.cn:84/njapis/njmaps/mapbox/js/mapbox-gl.js"></script>
<script type="text/javascript"
        src="//mapservices.njghzy.com.cn:84/other/njapis/auth/GeoGlobe/GeoGlobeJS.min.js?njtoken=your token"></script>
<script src="//polyfill.alicdn.com/polyfill.min.js"></script>

线条经纬度数据

lineData: [
[
  [118.72465105161245, 32.04129231819045],
  [118.83348107172577, 32.04356254941491]
],
[
  [118.77850801374001, 32.071876614710554],
  [118.77854291775418, 32.060043311688545],
  [118.7652679585209, 32.03146929570509],
  [118.74936775548377, 32.02623267304445]
],
]

绘制线条

将线条的内容绘制出来

getLine() {
  var that = this;
  // 创建geojson对象
  var GeoJSONUtil = new GeoGlobe.Format.GeoJSONUtil();
  // 通过点方法组装点geojson串
  var geojson = GeoJSONUtil.lines(this.lineData);

  var colorArr = ["rgba(0, 244, 224, 1.00)", "rgba(245, 20, 83, 1.00)"];
  var m = 0;
  var data = geojson.data.features;
  for (var i = 0; i < data.length; i++) {
    data[i].properties = {
      "color": colorArr[m], //颜色
    };
    m++;
  }
  // 添加线数据源
  that.map.addSource('line-source', geojson);

  // 添加线图层
  that.map.addLayer({
    'id': 'lines', //图层ID
    'type': 'line', //类型
    'source': 'line-source', //数据源
    'paint': {
      'line-width': 5, //线宽
      'line-color': ['get', 'color'] //通过颜色属性来显示对应的线颜色
    }
  });
},

监听线条点击事件

map.on('click', 'lines', function (e) {
  var feature = e.features[0]; // 获取点击的要素
  console.log('图层被点击了', feature);
  console.log('图层被点击了', e);
  that.show2 = true
  that.left = e.originalEvent.layerX
  that.top = e.originalEvent.layerY
})

点击线条后,我们可以获取当前位置信息以及线条信息,这时候我们就可以通过这些信息来添加弹窗信息了。

喜欢