• 腾讯地图基本使用(撒点位,点位点击,弹框等...功能) 搭配Vue3


    腾讯地图的基础注册账号 展示地图等基础功能在专栏的上一篇内容 大家有兴趣可以去看一看

    今天说的是腾讯地图的在稍微一点的基础操作 话不多说 直接上代码

    1. var marker = ref(null)
    2. var map
    3. var center = ref(null)
    4. // 地图初始化
    5. const initMap = () => {
    6. //定义地图中心点坐标
    7. center.value = new TMap.LatLng(30.589184, 114.29689)
    8. //定义map变量,调用 TMap.Map() 构造函数创建地图
    9. map = new TMap.Map(document.getElementById('container'), {
    10. center: center.value,//设置地图中心点坐标
    11. zoom: 6, //设置地图缩放级别
    12. mapStyleId: 'style1', //设置地图样式
    13. });
    14. //创建并初始化MultiMarker
    15. marker = new TMap.MultiMarker({
    16. map: map, //指定地图容器
    17. //样式定义
    18. styles: {
    19. //创建一个styleId为"myStyle"的样式(styles的子属性名即为styleId)
    20. //将不同的作物指定为不同的样式
    21. myStyleOne: new TMap.MarkerStyle({
    22. "width": 25,
    23. "height": 35,
    24. "src": markImgOne,
    25. "anchor": { x: 16, y: 32 }
    26. }),
    27. myStyleTwo: new TMap.MarkerStyle({
    28. "width": 25,
    29. "height": 35,
    30. "src": markImgTwo,
    31. "anchor": { x: 16, y: 32 }
    32. }),
    33. myStyleThere: new TMap.MarkerStyle({
    34. "width": 25,
    35. "height": 35,
    36. "src": markImgThere,
    37. "anchor": { x: 16, y: 32 }
    38. }),
    39. },
    40. //点标记数据数组
    41. geometries: convertedPoints.value
    42. });
    43. console.log('坐标数据',convertedPoints.value);
    44. //初始化infoWindow
    45. var infoWindow = new TMap.InfoWindow({
    46. map: map,
    47. position: new TMap.LatLng(39.984104, 116.307503),
    48. offset: { x: 0, y: -32 } //设置信息窗相对position偏移像素,为了使其显示在Marker的上方
    49. });
    50. infoWindow.close();//初始关闭信息窗关闭
    51. //监听标注点击事件
    52. marker.on("click", function (evt) {
    53. if (iconClidk.value == true) {
    54. // console.log(evt, '点位点击信息');
    55. projectInfo.value = { id: '3', name: '湖北省公租房管理第三方评价项目 ·' + evt.geometry.properties.title, sonTask: evt.geometry.properties.num, problem: '1', headName: '王五', phone: "18337391968", }
    56. }
    57. //设置infoWindow
    58. // infoWindow.open(); //打开信息窗
    59. // infoWindow.setPosition(evt.geometry.position);//设置信息窗位置
    60. // //将信息与标记点关联起来
    61. // infoWindow.setContent(evt.geometry.properties.title);//设置信息窗内容
    62. // console.log(evt)
    63. })
    64. //移除控件缩放
    65. map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ZOOM);
    66. // 移除比例尺控件
    67. map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.SCALE);
    68. // 移除旋转控件
    69. map.removeControl(TMap.constants.DEFAULT_CONTROL_ID.ROTATION);
    70. }

    这个大家看起来都没有难度)(包含点位点击和弹框)  重要的是撒点位时的数据处理 和 图标类别的区分显示

    这是后后端返回的数据 现在处理成想要的格式 

    1. const getLocationAndStatusFn = () => {
    2. let params = { projectId: projectId.value }
    3. getLocationAndStatus(params).then(res => {
    4. console.log(res, '获取各位置及状态');
    5. if (res.code == 200 && res.data.length > 0) {
    6. console.log(res,'点位信息');
    7. positionArr.value = res.data
    8. //点位数据
    9. convertedPoints.value = positionArr.value.map(item => {
    10. const [longitude, latitude] = item.position[0].split(',');
    11. // 设置已超时 已完成 进行中图标样式
    12. if (item.isOvertime == false) {
    13. if (item.status == '0' || item.status == '1' || item.status == '2' || item.status == '3') {
    14. styleIdValue.value = 'myStyleTwo'; // 根据status值设置样式
    15. } else if (item.status == '4' || item.status == '5') {
    16. styleIdValue.value = 'myStyleOne'; // 根据status值设置样式
    17. }
    18. } else {
    19. styleIdValue.value = 'myStyleThere';
    20. }
    21. // if(item.)
    22. return {
    23. id: item.district_id,
    24. styleId: styleIdValue.value, //这个用来区分显示不同的图标
    25. position: new TMap.LatLng(parseFloat(latitude), parseFloat(longitude)),
    26. properties: { //附带信息
    27. title: item.name,
    28. address: item.district,
    29. taskId: item.taskId,
    30. status: item.status
    31. }
    32. };
    33. });
    34. }
    35. })
    36. }

     最后处理完格式是这样的

    处理完数据 大家可以看到我在第一张代码里定义了3中样式的图片 当时我刚写的时候 图片死活出不来 只会显示腾讯地图的默认的红色图标 最后找到解决办法

    1. // 地图点位图标
    2. import markImgOne from '@/assets/visualization/icon/01.png';
    3. import markImgTwo from '@/assets/visualization/icon/02.png';
    4. import markImgThere from '@/assets/visualization/icon/03.png';

    你的点位图片要先引入才能使用 

    最后是设置中心点方法 

    1. //设置中心点城市
    2. function setCenter(lat, lng, xiaoqu) {
    3. map.setCenter(new TMap.LatLng(lat, lng))
    4. if (xiaoqu == 1) {
    5. //这个是设置地图的缩放层级
    6. map.easeTo({ zoom: 12 }, { duration: 2000 })
    7. } else if (xiaoqu == 0) {
    8. map.easeTo({ zoom: 7 }, { duration: 2000 })
    9. } else {
    10. map.easeTo({ zoom: 17 }, { duration: 2000 })
    11. }
    12. }

    最后看一下效果图

  • 相关阅读:
    04 后端增删改查【小白入门SpringBoot + Vue3】
    2024北京眼健康展览会,北京眼睛光学展,北京眼康品牌加盟展
    Servlet生命周期与线程安全
    MongoDB学习路线
    【原创】H3C路由器OSPF测试
    23111709[含文档+PPT+源码等]计算机毕业设计基于Spring Boot智能无人仓库管理-进销存储
    【毕业设计】深度学习卫星遥感图像检测与识别系统(目标检测)
    自动铣刀式分板机市场分析
    AI周报 | 算力上天、40亿美元买落地、大模型成地缘政治新战场
    LLVM(6)ORC实例分析:Transform in cpp
  • 原文地址:https://blog.csdn.net/m0_65607651/article/details/133960200