vue3+mapboxgl鼠标浮动显示cgcs2000

一、需求

鼠标在地图中浮动展示地图的经纬度,cgcs2000 xy 还有显示带号

二、实现效果

展示经度,纬度,x值,y值显示的是带号和y值

三、思路

3.1、mapbox获取经纬度方法

初始化地图后.on方法中有个mousemove方法

mapboxUtil._mapInstance.on('mousemove', mapboxUtil.mouseMove);
mouseMove(e) {
        console.log(e,"eeeeeeee")
        let obj = e.lngLat
        let WebMercator = wgs84ToCgcs2000(e.lngLat)
        obj["cgcsY"] = WebMercator[0]
        obj["cgcsX"] = WebMercator[1]
        obj["signed"] = WebMercator[2]
        store.commit("setMouseMove", obj);
    },

可以看出方法的参数中有经纬度,我们可以通过经纬度获取他的cgcs2000 xy 

 3.2、经纬度 和cgcs2000 互相转换

我这边用的是proj4,添加依赖

npm install proj4 --s

引用proj4 

import proj4 from "proj4";

  wgs84的参数= "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs  "

cgcs2000的参数= "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"

wgs84ToCgcs2000(lngLat) {
    let wgs84 = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs  "
    let cgcs2000 =
        "+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs"
    let obj = proj4(wgs84, cgcs2000, [lngLat.lng, lngLat.lat]);
    return obj;
}

 3.3、计算带号

 

由此可以看出三度带不在中央子午线上所以需要先减1.5度 

判断带号中国陆地范围内带号小于23的肯定是6度带,大于等于24的肯定是3度带。

如果计算的不多请多指教,我会及时改正

3度带带号计算公式:Math.floor((经度 - 1.5) / 3) + 1

let dh = Math.floor((lngLat.lng - 1.5) / 3) + 1

6度带带号计算公式:Math.floor(经度/ 3) + 1

let dh = Math.floor(lngLat.lng / 3) + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侧耳倾听...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值