首页 > 其他分享 >地图坐标转换 WGS84、BD09与GCJ02的相互转换

地图坐标转换 WGS84、BD09与GCJ02的相互转换

时间:2023-12-22 15:47:11浏览次数:33  
标签:WGS84 GCJ02 var lat 转换 lng PI sin Math

高德地图

WGS84转GCJ02

export function wgs84ToGcj02(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0)
        var dlng = transformlng(lng - 105.0, lat - 35.0)
        var radlat = lat / 180.0 * PI
        var magic = Math.sin(radlat)
        magic = 1 - ee * magic * magic
        var sqrtmagic = Math.sqrt(magic)
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)
        var mglat = lat + dlat
        var mglng = lng + dlng
        return [mglng, mglat]
    }
}

GCJ02转WGS84

export function gcj02ToWgs84(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    } else {
        var dlat = transformlat(lng - 105.0, lat - 35.0)
        var dlng = transformlng(lng - 105.0, lat - 35.0)
        var radlat = lat / 180.0 * PI
        var magic = Math.sin(radlat)
        magic = 1 - ee * magic * magic
        var sqrtmagic = Math.sqrt(magic)
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI)
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI)
        var mglat = lat + dlat
        var mglng = lng + dlng
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}

百度地图

BD09转GCJ02

export function bd09ToGcj02(lng, lat) {
    var x_pi = 3.14159265358979324 * 3000.0 / 180.0
    var x = lng - 0.0065
    var y = lat - 0.006
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi)
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi)
    var gg_lng = z * Math.cos(theta)
    var gg_lat = z * Math.sin(theta)
    return [gg_lng, gg_lat]
}

GCJ02转换BD09

export function gcj02ToBd09(lng, lat) {
    var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI)
    var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI)
    var bd_lng = z * Math.cos(theta) + 0.0065
    var bd_lat = z * Math.sin(theta) + 0.006
    return [bd_lng, bd_lat]
}

转换方法中使用到的其他方法

function transformlat(lng, lat) {
    var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng))
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0
    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0
    return ret
}

function transformlng(lng, lat) {
    var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng))
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0
    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0
    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0
    return ret
}

// 判断是否在国内,不在国内则不做偏移
function out_of_china(lng, lat) {
    return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false)
}
   

标签:WGS84,GCJ02,var,lat,转换,lng,PI,sin,Math
From: https://www.cnblogs.com/webenh/p/17921712.html

相关文章

  • python requests cookie格式转换
    importrequests#1.查看cookie#2.对比cookie#cookies=[{'domain':'.mingrisoft.com',#'httpOnly':False,#'name':'PHPSESSID',#'path':'/',#......
  • 在matlab中进行地理坐标和像素坐标的相互转换
    clc;closeall;clear;%地理坐标和像素坐标的相互转换[pic,R]=geotiffread('boston.tif');%读取带地理坐标信息的tif影像[m,n,~]=size(pic);%像素坐标转换为地理坐标figure(1),imshow(pic),title('不带地理坐标的静态图片');holdon;scatter(n/4,m/4,500,'r.');%选择1/......
  • 操作系统--分页存储管理中逻辑地址转换为物理地址
    【例1】考虑一个由8个页面,每页有1024个字节组成的逻辑空间,把它装入到有32个物理块的存储器中,问:(1)逻辑地址需要多少二进制位表示?(2)物理地址需要多少二进制位表示? 它由两个部分组成:前一部分表示该地址所在页面的页号p;后一部分表示页内地址(页内位移)d。页号的地址位数决定了......
  • 如何在C#中将float[]快速的转换为byte[]
    昨天喻兄抛出一个问题“如何在C#中将float[]快速的转换为byte[]”。于是开始了尝试。先写了下面的初始化代码usingSystem.Diagnostics;usingSystem.Runtime.InteropServices;Randomrandom=newRandom();//源数组varsrcArray=newfloat[500*1024*1024];//目的数......
  • 使用Newtonsoft.Json进行Json与XML相互转换
    XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析好像没啥难度。今天突然发现Newtonsoft.Json中有关于Json和XML互转的方法,所以顺带记录总结一下。一、关于Newtonsoft.JsonNewtonsoft.Json(Json.Net)是一款.NET中开源的Json序列化和反序列化类库。Json.Net是一个读写Json效......
  • Day04类型转换
    类型转换注意点:1.不能对布尔值进行转换2.不能把对象类型转换为不相干的类型3.在把高容量转换到低容量的时候,强制转换4.转换的时候可能存在内存溢出,或者精度问题!高转低,强制转换;低转高,自动转换低------------------------------------------->高byte,short,char->int-......
  • C# xml与对象相互转换
    例如:1.对象转xml(对象序列化为xml) stringstrImage=XmlSerializeHelper.Serialize<List<ImageSingle>>(imageList);2.xml转对象(反序列化) Imagebojimag=XmlSerializeHelper.DeSerialize<Image>(strimage);该序列化处理类如下: usingSystem;usingSys......
  • 【C#/WPF】Bitmap、BitmapImage、ImageSource 、byte[]转换问题
    C#/WPF项目中,用到图像相关的功能时,涉及到多种图像数据类型的相互转换问题,这里做了个整理。包含的内容如下:Bitmap和BitmapImage相互转换。RenderTargetBitmap–>BitmapImageImageSource–>BitmapBitmapImage和byte[]相互转换。byte[]–>BitmapStackOverflow上有很......
  • POI中创建条件格式后使用aspose转换为PDF时,颜色不正常的问题
    场景:使用一个EXCEL模板,其中创建了一些条件格式,通过EASYPOI进行模板填充,使用FE模板指令,复制填充了一些行,同时复制了这些行中存在的条件格式。现象:打开EXCEL,条件格式是正常的,但是随后通过ASPOSECELLS将XLSX转换为PDF,会发现新创建的条件格式的长短、颜色都不正常解决方法一:在EXCE......
  • 图片转换成base64格式的优缺点
    前言什么是base64?Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+“、”/“一共64个字符的字符集,(另加一个“=”,实际是65个字符,至于为什么还会有一个“=”,这个后面再说)。任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做base64编码。图片转换成base6......