首页 > 其他分享 >记录--在高德地图实现卷帘效果

记录--在高德地图实现卷帘效果

时间:2023-07-08 18:22:30浏览次数:36  
标签:map renderMask const -- event 掩模 图层 高德 卷帘

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

介绍

今天介绍一个非常简单的入门级小案例,就是地图的卷帘效果实现,各大地图引擎供应商都有相关示例,很奇怪高德居然没有,我看了下文档发现其实也是可以简单实现的,演示代码放到文末。本文用到了图层掩模,即图层遮罩,让图层只在指定范围内显示。

实现思路

1.创建目标图层,这里除了有一个默认的底图,还增加了卫星影像图和路网图层,后两者是可以被掩模的。因此在创建图层时通过设置rejectMapMask(默认值false)让图层是否允许被掩模。

2.提供实时设置掩模的方法renderMask,核心代码只需要map.setMask(mask)。

3.实现拖拽交互逻辑,监听拖拽过程,实时触发 renderMask

实现代码

1.创建目标图层

// 基础底图
  const baseLayer = new AMap.TileLayer({
      zIndex: 1,
      //拒绝被掩模 
      rejectMapMask: true,    
  })
 
  map = new AMap.Map('container', {
      center:[116.472804,39.995725],            
      viewMode:'3D',
      labelzIndex:130,
      zoom: 5,
      cursor:'pointer',
      layers:[
          // 底图,不掩模
          baseLayer,
          // 路网图层
          new AMap.TileLayer.RoadNet({
              zIndex:7
          }),
          // 卫星影像图层
          new AMap.TileLayer.Satellite()
      ]
  });

2.提供实时设置掩模的方法

function renderMask(){
    // 当前地图范围
    const {northEast, southWest} = map.getBounds()
    // 地理横向跨度
    const width = northEast.lng - southWest.lng
    // 拖拽条位置占比例
    const dom = document.querySelector('#dragBar')
    const ratio = Math.ceil(parseInt(dom.style.left) + 5) / map.getSize().width

    let mask = [[
        [northEast.lng, northEast.lat],
        [southWest.lng+ width * ratio, northEast.lat],
        [southWest.lng+ width * ratio, southWest.lat],
        [northEast.lng, southWest.lat]
    ]]
    
    map.setMask(mask)
}

3.实现拖拽交互逻辑

// 拖拽交互
function initDrag(){
    
    const dom = document.querySelector('#dragBar')
    dom.style.left = `${map.getSize().width/2}px`

    // const position = {x:0, y:0}        
    interact('#dragBar').draggable({
        listeners: {
            start (event) {                    
                // console.log(event.type, event.target)
            },
            move (event) {      
                // 改变拖拽条位置              
                const left = parseFloat(dom.style.left)
                const targetLeft = Math.min(Math.max(left + event.dx, 0), map.getSize().width - 10)
                dom.style.left = `${targetLeft}px`    
                
                if(event.dx !== 0){
                    renderMask()
                    //必须!强制地图重新渲染
                    map.render() 
                }                                                   
            },
            end(event){   
                // console.log(event.type, event.target)                                                      
            }
        }
    })
}

4.启动相关方法,完善交互逻辑

initDrag()
renderMask()
map.on('mapmove', renderMask)
map.on('zoomchange', renderMask)
window.addEventListener('resize', renderMask)

相关链接

本文代码演示

jsfiddle.net/gyratesky/z…

maptalks 图层卷帘效果

maptalks.org/examples/cn…

卫星+区域掩模

lbs.amap.com/demo/javasc…

本文转载于:

https://juejin.cn/post/7248618596976083000

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

标签:map,renderMask,const,--,event,掩模,图层,高德,卷帘
From: https://www.cnblogs.com/smileZAZ/p/17537623.html

相关文章

  • 03-kubeadm初始化Kubernetes集群
    集群部署架构规划:节点网络:192.168.1.0/24Service网络:10.96.0.0/12Pod网络:10.244.0.0/16  部署方法参考:https://github.com/kuberneteskop方式:AWS(AmazonWebServices)andGCE(GoogleCloudPlatform)arecurrentlyofficiallysupportedkubeadm方式:https://github.com......
  • error NU1803: 错误形式的警告: 正在通过 “HTTP” 源“http://apricot.com/repositor
    一、私有仓库错误(vs2022)错误信息errorNU1803:错误形式的警告:正在通过“HTTP”源“http://apricot.com/repository/nuget-group/”运行“restore”操作。将来的版本中将删除非HTTPS访问权限。请考虑迁移到“HTTPS”源。错误截图二、解决&处理打开Nuget配置%APP......
  • ihHS-Numerical test report
       ......
  • windows和linux应急响应命令 9
    windows1、系统账户排查netuser列出所有用户,进行可疑账号排查。 2、检查异常端口netstat-ano 3、检查可疑进程和服务tasklist 4、可疑启动项排查msconfig 5、查看登录日志eventvwr.msc 6、恶意样本排查  linux1、查看用户信息查看用户的账号文件信......
  • WINUI 引入 CommunityToolkit.WinUI.UI进行数据验证
     先在xaml命名空间中引入  xmlns:ui="using:CommunityToolkit.WinUI.UI"textbox中进行IP验证如下:<TextBoxx:Name="textBox"Width="200"Height="30"Background="AliceBlue"ui:TextBoxExten......
  • github连接不上
    1.确定是否github.com网址映射正确,通过[email protected]或者nslookup github.com查看,有时候,github.com会被映射到127.0.0.12.确认ssh公钥是否配置正确,通过[email protected],可以查看使用的ssh-key,同时在github中的SSHkeys中查看对应的key使用时间, ......
  • 函数定义、调用、闭包
    函数的语法及调用步骤函数是直接在模块/py文件中定义的,与类方法、实例方法有区别。1'''2一、函数的语法:3deffunction_name(parameter1,parameter2,...):4"""函数文档字符串"""5#函数体代码块6#...7returnvalue#可选的返回值8......
  • vue store中存储的数据,走谷歌浏览器 那里可以看到
    在Vue的应用程序中,存储在Vuex(也称为VueStore)中的数据是在浏览器的开发者工具中查看的。对于谷歌浏览器(Chrome),你可以按照以下步骤在开发者工具中查看Vuex中的数据:在你的Vue应用程序中打开谷歌浏览器并加载页面。右键单击页面上的任何位置,并选择"检查"或使用快捷键F1......
  • COMP9311 SQL语言
    ThisprojectaimstogiveyoupracticeinReadingandunderstandingamoderatelylargerelationalschema(MyMyUNSW).ImplementingSQLqueriesandviewstosatisfyrequestsforinformation.ImplementingPL/pgSQLfunctionstoaidinsatisfyingrequestsforin......
  • 7.1到7.8
    7.1:无事发生7.2:无事发生7.3:第一天当老师,教2345年级的数学,一天六个小时,还算轻松。这一天挺累·,晚上11点多就睡了7.4:下大雨啦,今天不用上班啦,在家里呆了一天。7.5:四年级那个班真闹,想把那五六个不听话的杀了。7.6:发小们回来的差不多了,能凑够四个人打扑克了,晚上添加新活......