美文网首页GIS加油站
地图放大镜的实现

地图放大镜的实现

作者: 牛老师讲webgis | 来源:发表于2021-11-25 23:49 被阅读0次

概述

闲来无事,就做一个花里胡哨的功能:地图放大镜,从中可以学习:1、根据坐标计算对应级别的切片;2、canvas绘图。

实现效果

实现效果

实现思路

  1. 注册mappointermove事件;
  2. 通过当前级别+放大级别,计算当前坐标所在放大级别对应的切片;
  3. 请求切片图片,并绘制到canvas上面;

实现代码

const tileSize = 256
const canvas = document.createElement('canvas')
canvas.width = tileSize
canvas.height = tileSize
const ctx = canvas.getContext('2d')
const scale = 4
canvas.classList.add('canvas')
map.getTargetElement().appendChild(canvas)
function getCoordsTile(coords) {
  let resolution = 156543.03392804097
  let resolutions = []
  for (let i = 0; i < 19; i++) {
    resolutions.push(resolution)
    resolution = resolution/ 2
  }
  const val0 = resolutions[0] * tileSize / 2
  const originX = -val0
  const originY = val0
  let zoom = Math.ceil(map.getView().getZoom()) + scale
  zoom = zoom > 18 ? 18: zoom
  const res = resolutions[zoom] * tileSize
  const x = Math.floor((coords[0] - originX) / res)
  const y = Math.floor((originY - coords[1]) / res)
  return {zoom, x, y}
}
// 地图拖动和缩放事件
map.on('pointermove', function (e) {
  vecSource.clear()
  const pixel = e.pixel
  const coords = e.coordinate
  const feature = new ol.Feature({
    geometry: new ol.geom.Point(coords)
  })
  vecSource.addFeature(feature)
  const {zoom, x, y} = getCoordsTile(coords)
  let url = options.tileUrl.split('{z}').join(zoom)
  url = url.split('{x}').join(x)
  url = url.split('{y}').join(y)
  const img = new Image()
  img.src = url
  img.onload = function () {
    ctx.beginPath()
    ctx.arc(tileSize / 2, tileSize / 2, tileSize / 2, 0, Math.PI * 2)
    ctx.clip()
    ctx.drawImage(img, 0, 0)
    canvas.style.left = pixel[0] + 'px'
    canvas.style.top = pixel[1] + 'px'
  }
})

相关文章

  • 地图放大镜的实现

    概述 闲来无事,就做一个花里胡哨的功能:地图放大镜,从中可以学习:1、根据坐标计算对应级别的切片;2、canvas...

  • 2018-12-01

    JS实现放大镜功能 网店中的商品都能放大查看细节,这里是放大功能的简单实现。。。。 这个放大镜具有选择放大倍数的功...

  • javascript实现放大镜插件【含进阶】

    [目录] 【简单的实现放大镜动能】 成果图 放大镜的原理 网页结构 实现步骤第一步 获取元素第二步 注册鼠标进...

  • 高德地图当前位置图标旋转功能实现

    实现思路 1、添加高德地图 2、实现地图添加大头针的代理,设置当前位置图标 3、在地图时时位置更新的方法里实现旋转...

  • 地图找房功能

    简介 因项目中需求,需要实现地图找房功能,根据地图范围加载对应的访问数据。 说明:目前基于百度地图API实现地图找...

  • 地图的实现

    地图的参考文档,http://lbs.amap.com/api/javascript-api/gettingsta...

  • 区块链让“马耳他”名声大噪

    马耳他(Republic of Malta),这个要用放大镜才能在地图上找到的国 家,近来随着区块链的逐渐升温,慢...

  • 区块链让“马耳他”名声大噪

    马耳他(Republic of Malta),这个要用放大镜才能在地图上找到的国 家,近来随着区块链的逐渐升温,慢...

  • 区块链让“马耳他”名声大噪

    马耳他(Republic of Malta),这个要用放大镜才能在地图上找到的国 家,近来随着区块链的逐渐升温,慢...

  • 基于lbs服务应用开发

    任务目标:1、实现地图地址级联下拉选项任务目标:2、实现地图搜索周边服务任务目标:3、实现地图鼠标点击获取地址和坐...

网友评论

    本文标题:地图放大镜的实现

    本文链接:https://www.haomeiwen.com/subject/psctxrtx.html