腾旭地图显示多个位置,点击弹出位置信息

在vue3中

1.定义地图展示中心点 的经纬度

const longitude = ref(40.765465);

const latitude = ref(114.881075);

2.初始化

const initMap = () => {

console.log(mapMark.value);

map.value = new window.TMap.Map(mapMark.value, {

center: new window.TMap.LatLng(longitude.value, latitude.value), //设置地图中心点坐标

zoom: 11, //设置地图缩放级别

pitch: 43.5, //设置俯仰角

rotation: 0 //设置地图旋转角度

});

};

onMounted(() => {

initMap();

moreMarks()

});

3.方法

javascript 复制代码
const mark = info => {
  let geo = [
    // {
    //   // id: '1',
    //   styleId: 'myStyle',
    //   position: new window.TMap.LatLng(longitude.value, latitude.value) // 点标记的坐标位置
    // }
  ];
  if (info) {
    info.forEach(item => {
      geo.push({
        id: item.id ? item.id + '' : '1',
        styleId: item.styleId ? item.styleId : 'myStyle', // 指定样式id
        position: new window.TMap.LatLng(item?.latitude, item?.longitude), // 点标记的坐标位置
        content: item.text ? item.text : ''
      });
    });
  }

  markerCluster.value = new window.TMap.MultiMarker({
    map: map.value,
    styles: {
      myStyle: new window.TMap.MarkerStyle({
        //图片样式配置参数
        // src: require('../../assets/tengxun/定位.png'),  //图片路径
        width: 25, //图片宽度(单位为像素,默认为图片原宽度)
        height: 35, //图片高度(单位为像素,默认为图片原高度)
        opacity: 0.9, //图片透明度(默认为1,保持原透明度)
        // faceTo: 'map', //图片保持贴地(默认图片直立朝向屏幕)
        //文字样式配置参数
        size: 16, //文字大小
        color: '#007ACC', //文字颜色
        strokeWidth: 2, //文字描边宽度
        strokeColor: '#fff', //文字描边颜色
        direction: 'top' //文字相对于图片的位置
      })
    },
    // 点标记数据数组
    geometries: geo
  });
  infoWindow.value = new window.TMap.InfoWindow({
    map: map.value,
    position: new window.TMap.LatLng(39.984104, 116.307503),
    offset: { x: 0, y: -32 } //设置信息窗相对position偏移像素
  });
  infoWindow.value.close(); //初始关闭信息窗关闭
  markerCluster.value.on('click', event => {
    // console.log('123', event);
    // mapInfoList.value.forEach(item => {
    //   if (item['id'] == event['geometry']['id']) {
    //     newForm.value = item;
    //   }
    // });
    // visible.value = true;
    infoWindow.value.open(); //打开信息窗
    infoWindow.value.setPosition(event.geometry.position); //设置信息窗位置
    let infoStr=''
     mapInfoList.value.forEach(item => {
      if (item['id'] == event['geometry']['id']) {
        // newForm.value = item;
        console.log(item);
        infoStr=`酒店名称:${item?.realName};<br>小区名称${item?.cellName};<br>地址:${item?.roomAddress};<br>门牌号:${item.roomNum}`
      }
    });
    // infoWindow.value.setContent(event.geometry.position.toString()); //设置信息
    infoWindow.value.setContent(infoStr); //设置信息
  });
};

4.调接口,拿到位置信息数组,再调用方法

javascript 复制代码
const moreMarks = () => {
  getMapInfo().then(res => {
    let arr = [];
    res.forEach((item, index) => {
      arr.push({
        cellName: item?.cellName,
        id: item['id'],
        longitude: Number(item['longitude']),
        latitude: Number(item['latitude']),
        realName: item?.realName,
        roomAddress: item?.roomAddress,
        roomNum: item?.roomNum,
        text: item?.realName + item?.cellName,
        styleId: 'myStyle'
      });
      mapInfoList.value.push({
        ...item
      });
    });
    nextTick(() => {
      mark(arr);
    });
  });
};
相关推荐
Setsuna_F_Seiei6 小时前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
志尊宝6 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
zhangzeyuaaa7 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙7 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯7 小时前
标签打印软件怎么对接 Excel 数据
前端·excel
思无邪668 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能
一个风轻云淡8 小时前
GCC 和 GDB命令简单解读
java·linux·前端
u0111026759 小时前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说10 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa10 小时前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端