高德地图jsApi的点位新增

lxf2023-05-04 00:55:54

开启编程成长之旅!这是我参与「编程 · 12 月更文挑战」的第23天,点击查看活动详情

通过前几篇文章,我们大致的了解了高德地图的简单使用,以及点和线的一些设置,这一期我们来看一下交互是如何添加的,我这里是一个简单的交互,复杂的业务下还需要大家自行扩展哦~

  • 这一篇是本系列第四篇,前三篇大家可以点击链接访问
    高德地图jsApi的使用
    高德地图jsApi的点和线配置
    高德地图jsApi的右键设置
    完成代码请查看代码仓库
  • 先分享一下我这里的业务思路,看图说话~
    高德地图jsApi的点位新增 我这里比较简单了,一个经度,一个纬度,输入以后带你完成或者清空,点完成的时候会有一个简单的验证,我这里先做的是判定是不是数值,然后判定输入的坐标系的值是否在我们国家范围之内。输入正确以后图形上新增点,新增的点这一块我把之前点渲染的逻辑抽离了出来,直接使用一个方法就可以,事件全部是在抽离出来的方法里面绑定的,点位增加以后,输入框清空,点击清空输入,同样清空,其他交互事件和上一期做的相同。
  • 下面配合注释食用代码:
  // 输入事件 
  const done = document.getElementsByClassName('btn')[0];
  const del = document.getElementsByClassName('btn')[1];
  const longitude = document.getElementsByTagName('input')[0];  // 经度
  const latitude = document.getElementsByTagName('input')[1];   // 纬度
  done.addEventListener('click',()=>{
    console.log(longitude.value);
    // 中国经纬度范围, 经度 73.33 - 135.05 , 纬度 3.51-53.33
    const lng = longitude.value;
    const lat = latitude.value;
    if(Number.isNaN(Number(lng)) || Number.isNaN(Number(lat))){
      alert('请输入数值')
      return
    }
    if(lng <= 73 || lng > 135){
      alert('请输入正确的经度')
      return
    }
    if(lat < 3.5 || lat > 53){
      alert('请输入正确的纬度')
      return
    }
    const marker = {
      position:[lng,lat]
    }
    setMarker(marker)
    clearInput()
  })
  del.addEventListener('click',clearInput)
  // 清除输入框
  function clearInput(){
    longitude.value = ''
    latitude.value = ''
  }


  // 抽离点位信息设置
  function setMarker(marker){
    //创建右键菜单
    var contextMenu = new AMap.ContextMenu();

    //右键放大
    contextMenu.addItem("放大一级", function ()
    {
      map.zoomIn();
    }, 0);

    //右键缩小
    contextMenu.addItem("缩小一级", function ()
    {
      map.zoomOut();
    },1);

    contextMenu.addItem("设置起点", function ()
    {
      console.log(marker,markerd.dom);
      changeStyle(markerd.dom,marker)
      contextMenu.close() // 关闭右键菜单
    });

    contextMenu.addItem("与起点连线", function ()
    {
      if(!currentPonit){
        alert('请选择起点')
        contextMenu.close() 
        return
      }else{
        // 这里其实可以根据数据判定线类型了,因为第二个选中点的信息+和第一个选中点的信息都有了,但是过滤方法会比较复杂
        let path = [currentData.position,marker.position];
        const polyline1 = setLines(path,'#3366bb',5);
        map.add([polyline1]);
        clearPoint();
      }
      contextMenu.close() // 关闭右键菜单
    });
    let content = '<div class="marker-route"></div>';
    var markerd = new AMap.Marker(
    {
      map: map,
      // icon: marker?.icon,
      content,
      offset: new AMap.Pixel(-8,-8),
      visible:true, // 点标记是否可见
      position: [marker.position[0], marker.position[1]],
    });
  
    //绑定鼠标右击事件——弹出右键菜单
    markerd.on('rightclick', function (e)
    {
      contextMenu.open(map, e.lnglat);
    });
  }
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!