Cesium中高德、百度地图的偏移矫正

Cesium中高德、百度地图的偏移矫正

一、坐标系介绍

不同地图的坐标系
(1)WGS84(cesium GPS)
即GPS原始坐标系,也是当今三维开发中最普遍使用的坐标系。
(2)GCJ-02:火星坐标系(高德)
由国测局发布的加密坐标系,是国内互联网地图最广泛使用的坐标系,包括高德、腾讯。
(3)BD-09(百度地图)
百度地图所采用的坐标系,即在火星坐标系上进一步偏移得到,与高德地图相差不大。
(4)CGCS2000(天地图)
又称2000国家大地坐标系,由西安80坐标系发展而来,一般使用高斯克吕格投影,用于国内土地调查等坐标参考系。天地图采用此坐标系.

二、实现效果

底图为Cesium中默认的必应地图,上面是高德地图的注记地图。
在这里插入图片描述

二、实现方法

(1)添加坐标转换的js文件 CoordTransform.js;

const BD_FACTOR = (3.14159265358979324 * 3000.0) / 180.0; // 百度坐标系的修正因子
const PI = 3.1415926535897932384626; // 圆周率
const RADIUS = 6378245.0; // 地球半径
const EE = 0.00669342162296594323; // 椭球的偏心率平方

class CoordTransform {
   
   
  /**
   * BD-09(百度坐标系) To GCJ-02(火星坐标系) 的转换方法
   * @param lng 经度
   * @param lat 纬度
   * @returns {number[]} 返回经纬度数组
   */
  static BD09ToGCJ02(lng, lat) {
   
   
    let x = +lng - 0.0065; // 经度修正
    let y = +lat - 0.006; // 纬度修正
    let z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * BD_FACTOR); // z 值修正
    let theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * BD_FACTOR); // theta 值修正
    let gg_lng = z * Math.cos(theta); // 修正后的经度
    let gg_lat = z * Math.sin(theta); // 修正后的纬度
    return [gg_lng, gg_lat];
  }

  /**
   * GCJ-02(火星坐标系) To BD-09(百度坐标系) 的转换方法
   * @param lng 经度
   * @param lat 纬度
   * @returns {number[]} 返回经纬度数组
   */
  static GCJ02ToBD09(lng, lat) {
   
   
    lat = +lat;
    lng = +lng;
    let z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * BD_FACTOR); // z 值修正
    let theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * BD_FACTOR); // theta 值修正
    let bd_lng = z * Math.cos(theta) + 0.0065; // 修正后的经度
    let bd_lat = z 
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值