WGS84坐标转BD-09坐标(wgs84转百度)
推荐使用方法2 !!!
Web服务API | 百度地图API SDK
方法1
定义一个待转换的坐标数组。
// 待转换的坐标数组
var points = [new BMap.Point(116.404, 39.915),new BMap.Point(121.48044, 31.236985),new BMap.Point(113.952051, 22.538413),// ...
];
数据格式为
points = [{lat: 32.40957500210635,lng: 120.51806889999999},{lat: 32.40957500210111,lng: 120.51806889999999},{lat: 32.40957500210222,lng: 120.51806889999999},]
创建转换器对象并调用translate()方法进行坐标转换。需要注意的是,一次最多只能同时转换100个坐标。因此,在实际使用中,我们需要对待转换的坐标数组进行分组,每次转换不超过100个坐标,再将结果合并到转换后的坐标数组中。
// 创建转换器对象
var convertor = new BMap.Convertor();// 对原始坐标数组进行分组,每组100个坐标以内
var groups = [];
var len = points.length;
for (var i = 0; i < len;) {groups.push(points.slice(i, i + 100));i += 100;
}// 遍历每个分组,调用translate()方法进行坐标转换,并处理回调函数返回的结果
var baiduPoints = [];
function onConvertComplete(result) {if (result.status === 0) {baiduPoints = baiduPoints.concat(result.points);if (baiduPoints.length === len) {// 所有坐标转换完成后,baiduPoints数组中即为转换后的百度坐标// do something with baiduPoints here}} else {alert("坐标转换失败");}
}
for (var i = 0; i < groups.length; i++) {convertor.translate(groups[i], 1, 5, onConvertComplete);
}
在上述代码中,首先对原始坐标数组进行分组,每组最多100个坐标。然后遍历每个分组,调用
translate()
方法将该分组所包含的所有坐标转换为百度坐标。回调函数中将返回的百度坐标合并到baiduPoints
数组中,如果所有分组的坐标转换完成后,baiduPoints.length
达到总坐标数,则表示所有坐标已经转换完成,可以进行下一步处理了。需要注意的是,在实际开发中,百度地图API应该尽量避免同时请求过多的接口,否则可能会引起网络请求延迟或者其他问题。因此,在进行批量坐标转换时,应该根据实际情况控制并发请求的数量,以保证接口的稳定性和响应速度。
方法2
新建 utils/wgs84ToBd09.js 文件(复制粘贴即可,注意修改本文件的id)
/*** WGS84转GCj02* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换* @param lng // 120.63014 (并非字符串)* @param lat // 32.394913 (并非字符串)* @param args // 其他的参数,传入格式为 {aaa: "aaa",bbb: "bbb",ccc: "ccc"}* @DEMO: wgs84ToGcj02ToBd09Public(120.63014, 32.394913, {aaa: "aaa",bbb: "bbb",ccc: "ccc"})* @returns {*[{aaa: "aaa",bbb: "bbb",ccc: "ccc",latitude: 32.414345685248584,longitude: 120.52607270431302}]}* @Intro: 先将WGS84坐标转火星坐标再将火星坐标转百度坐标*/export function wgs84ToGcj02ToBd09Public(lng, lat, ...args) {const xPI = (3.14159265358979324 * 3000.0) / 180.0;const PI = 3.1415926535897932384626;const a = 6378245.0;const ee = 0.00669342162296594323;// WGS84转GCj02let dlat = transformlat(lng - 105.0, lat - 35.0);let dlng = transformlng(lng - 105.0, lat - 35.0);let radlat = (lat / 180.0) * PI;let magic = Math.sin(radlat);magic = 1 - ee * magic * magic;let sqrtmagic = Math.sqrt(magic);dlat = (dlat * 180.0) / (((a * (1 - ee)) / (magic * sqrtmagic)) * PI);dlng = (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI);let mglat = lat + dlat;let mglng = lng + dlng;// 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换let z =Math.sqrt(mglng * mglng + mglat * mglat) + 0.00002 * Math.sin(mglat * xPI);let theta = Math.atan2(mglat, mglng) + 0.000003 * Math.cos(mglng * xPI);let bdlng = z * Math.cos(theta) + 0.0065;let bdlat = z * Math.sin(theta) + 0.006;// return [bdlng, bdlat]/* Object.assign({}, target, source),其中第一个参数是一个空对象,第二个参数是目标对象,第三个参数是源对象。该方法会将源对象中不存在于目标对象中的属性复制到目标对象中,而不会覆盖目标对象中已经存在的同名属性。 */return Object.assign({}, {longitude: bdlng, latitude: bdlat}, ...args);
}function transformlat(lng, lat) {const PI = 3.1415926535897932384626;let 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) {const PI = 3.1415926535897932384626;let 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;
}
使用
import { wgs84ToGcj02ToBd09 } from "@/utils/wgs84ToBd09";// arr 是转换前的点位数据arr.forEach((item, index) => {helpArrRes.push(wgs84ToGcj02ToBd09(item.lng, item.lat, {id: item.clusterId}))})// arr 数据格式如下arr = [{lng: 123123123123,lat: 13123123,clusterId: 1},{lng: 12312311223,lat: 1312333,clusterId: 2},{lng: 12312312323,lat: 12412412412,clusterId: 3},]
WGS84坐标转BD-09坐标(wgs84转百度)相关推荐
- GPS坐标互转:WGS-84(GPS)、GCJ-02(Google地图)、BD-09(百度地图)
GPS坐标互转:WGS-84(GPS).GCJ-02(Google地图).BD-09(百度地图) WGS-84:是国际标准,GPS坐标(Google Earth使用.或者GPS模块) GCJ-02:中 ...
- gcoord: 转换WGS84、GCJ02、BD09坐标,转换百度高德地图坐标系
做过地图相关开发的同学肯定会遇到这样一个问题:同样的经纬度坐标,在百度地图和高德地图上位置不一样. 关于坐标系 我们通常用经纬度来表示一个地理位置,但是由于一些原因,我们从不同渠道得到的经纬度信息可能 ...
- gcoord: 转换WGS84、GCJ02、BD09坐标,解决百度地图高德地图坐标系不统一的问题
做过地图相关开发的同学肯定会遇到这样一个问题:同样的经纬度坐标,在百度地图和高德地图上位置不一样. 关于坐标系 我们通常用经纬度来表示一个地理位置,但是由于一些原因,我们从不同渠道得到的经纬度信息可能 ...
- 转换WGS84、GCJ02、BD09坐标,解决百度高德坐标偏移
转换WGS84.GCJ02.BD09坐标,解决百度高德坐标偏移 做过地图相关开发的同学肯定会遇到这样一个问题:同样的经纬度坐标,在百度地图和高德地图上位置不一样. 关于坐标系 我们通常用经纬度来表示一 ...
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...
转自:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标.百度坐标.WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版 火星坐标 ...
- 【转】火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...
原文地址:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地 ...
- gps wgs84坐标与高德gcj02坐标互转
vue中 wgs84坐标转为高德gcj02坐标,详见高德官方文档:其他坐标转高德坐标-坐标变换-教程-地图 JS API | 高德地图API //设置gps wgs84坐标转为高德gcj02conve ...
- WGS84经纬度坐标与北京54坐标或者…
WGS84经纬度坐标与北京54坐标或者西安80坐标的关系 一般来讲,GPS直接提供的坐标(B,L,H)是1984年世界大地坐标系(Word Geodetic System1984即WGS-84 ...
- WGS84 / BD09 / GCJ02 / MapBar 经纬度坐标互转
WGS84 / BD09 / GCJ02 / MapBar 经纬度坐标互转 Geolocataion converting between WGS84, BD09 and GCJ02. WGS84 / ...
- 2000坐标系xy坐标几位_2000坐标(国家2000坐标xy各几位)
2000坐标系,我国当前最新的国家大地坐标系,英文名称为China Geodetic Coordinate System 2000,英文缩写为CGCS2000 2000.80.54这几个坐标系,都是我 ...
最新文章
- 学计算机专业的毕业证,对于计算机专业的同学来说,学历真的那么重要吗?
- scala技术文章集锦
- modis数据介绍_【更新90篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
- ARM中断分析之一:中断控制器和CPU、外设的关系
- 中国AI人才缺口500万,10本硬核技术书带你上车
- 第四次学习记录(ROS)
- asp.net中XmlDocument解析出现出错,处理特殊字符
- 【Spring Cloud】保护机制-Hystrix
- 什么是JAVA内容仓库(Java Content Repository)(4完)
- 京东首页链接的商品竟然下柜?
- maven 启动项目默认tomcat6更换为tomcat7或其他版本
- 在龙芯1c上使用rt-thread统一标准的spi接口
- kindle可以看html格式文章吗,Kindle 新功能上线:终于可以显示阅读数据了
- 送给计算机老师平安夜贺卡,平安夜小朋友送老师的贺卡寄语
- B站顶流何同学对话苹果CEO库克,iPhone某些设计想法源自中国
- 一般计算机电源多大,【小知识】台式机电源选多大才够?
- 云时代,网络攻击已经“鸟枪换炮”,你的企业安全还在按兵不动?
- mc服务器怎么回到床的位置,《我的世界》MC床的功能居然跟这四个指令有关系?很多人不知道!...
- 基于BERT做中文文本分类(情感分析)
- python表白代码,照片隐藏表白话语