js地图库的使用,几种坐标之间的相互转换

@

目录

一: js地图库的使用,几种坐标之间的相互转换

简介:现在市面上大部分就是:腾讯、高德、腾讯、这三大类的地图使用的多,高德百度平时本身就用的不少,腾讯也是因为小程序啊 或者聊天的时候都会用到位置。所以在使用的时候都不少。
但是:就是会出现很多不同的经纬度的表达方式。在此总结一下。

WGS-84坐标系:GPS的原始坐标系

在中国,所有的产品都不允许直接使用这个坐标系直接定位,因为很多的这个GPS设备直接获取gps信号得到的经纬度就是84的,你要基于这个做地图不就泄密了吗是吧。

GCJ-02 坐标系:国测局坐标火星坐标系

中国国测局02年发布的坐标体系,它是一种对经纬度数据的加密算法,即加入随机的偏差。所有的中国的互联网地图都必须至少使用GCJ-02进行首次加密,同时任何坐标系均不可转换为WGS-84坐标。

BD-09坐标系:百度地图的 使用GCJ-02进一步偏移算法得到的

二:各个地图使用的坐标系:

在这里插入图片描述

三:相互之间的转换:(BD09--GCJ02)

还用就是这几个官方的坐标转换都是有官方的API的,你像wgs-84转bd-09,百度地图是有官网API 的

传送门:

百度地图坐标拾取 http://api.map.baidu.com/lbsapi/getpoint/index.html
高德地图坐标拾取 https://lbs.amap.com/tools/picker
腾讯地图坐标拾取 https://lbs.qq.com/getPoint/

转腾讯地图官方API https://lbs.qq.com/service/webService/webServiceGuide/webServiceTranslate

转百度坐标官方API https://lbsyun.baidu.com/jsdemo.htm#TranslateoriTobd
在这里插入图片描述
在这里插入图片描述

/**
* 坐标转换,百度地图坐标转换成腾讯地图坐标
* lng 腾讯经度(pointy)
* lat 腾讯纬度(pointx)
* 经度>纬度
*/
function bMapToQQMap(lng, lat) {

    if (lng == null || lng == '' || lat == null || lat == '')
        return [lng, lat];

    var x_pi = 3.14159265358979324;
    var x = parseFloat(lng) - 0.0065;
    var y = parseFloat(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 lng = (z * Math.cos(theta)).toFixed(7);
    var lat = (z * Math.sin(theta)).toFixed(7);

    return [lng, lat];

}

/**
* 坐标转换,腾讯地图转换成百度地图坐标
* lng 腾讯经度(pointy)
* lat 腾讯纬度(pointx)
* 经度>纬度
*/

function qqMapToBMap(lng, lat) {

    if (lng == null || lng == '' || lat == null || lat == '')
        return [lng, lat];

    var x_pi = 3.14159265358979324;
    var x = parseFloat(lng);
    var y = parseFloat(lat);
    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 lng = (z * Math.cos(theta) + 0.0065).toFixed(5);
    var lat = (z * Math.sin(theta) + 0.006).toFixed(5);
    return [lng, lat];

}

四:计算经纬度之间的距离:

js:

function toRad(d) {  return d * Math.PI / 180; }
	function getDisance(lat1, lng1, lat2, lng2) {
	    var dis = 0;
	    var radLat1 = toRad(lat1);
	    var radLat2 = toRad(lat2);
	    var deltaLat = radLat1 - radLat2;
	    var deltaLng = toRad(lng1) - toRad(lng2);
	    var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
	    return dis * 6378137;
	} 
	console.log(  getDisance(39.91917,116.3896,39.91726,116.3940) );

mysql:

#表结构如下
CREATE TABLE `map` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `lat` decimal(12,6) NOT NULL,
  `lng` decimal(12,6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
SELECT id,lat,lng,((
2*ATAN2(SQRT(SIN((39.91578-lat)*PI()/180/2)   
        *SIN((39.91578-lat)*PI()/180/2)+   
        COS(lat*PI()/180)*COS(39.91578*PI()/180)   
        *SIN((116.3899-lng)*PI()/180/2)   
        *SIN((116.3899-lng)*PI()/180/2)),   
        SQRT(1-SIN((39.91578-lat)*PI()/180/2)   
        *SIN((39.91578-lat)*PI()/180/2)   
        +COS(lat*PI()/180)*COS(39.91578*PI()/180)   
        *SIN((116.3899-lng)*PI()/180/2)   
        *SIN((116.3899-lng)*PI()/180/2))))*6378140) as len FROM `map` order by len asc ;

咫尺远近却无法靠近的那个你,才敢让你发觉你并不孤寂

推荐这些文章:

百度地图坐标转换

/**
* 坐标系转换函数
* WGS->GCJ
* WGS->BD09
* GCJ->BD09
*/
function Convertor(ak) {
this.stepCount = 100;
this.pointCount = [];
this.Result = [];
this.NoisIndex = [];
this.Time = new Date();
this.AK = ak;
this.M_PI = 3.14159265358979324;
this.A = 6378245.0;
th...

计算两地之间的距离(经纬度)

 

function getRange(lat1, lng1, lat2, lng2) {
var radLat1 = lat1 * Math.PI / 180.0;
var radLat2 = lat1 * Math.PI / 180.0;
var a = radLat1 - radLat2;
var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.s...

js计算两个经纬度之间的距离

/** 两点的距离 */
class Distance {
/**
* @class Distance
* @method val
* @param {number} start_lat - 起点的纬度
* @param {number} start_lon - 起点的经度
* @param {number} end_lat - 终点的纬度
* @param {number} end_lon - 终点的经度
* @return {number} 距离千米/公里
* @description 根据两点的经...

地图坐标:地图火星坐标、地球坐标、百度坐标偏差转换(java代码)

简单说明什么是坐标偏移?
http://yanue.net/post-121.html
地球坐标 (WGS84)

国际标准,从 GPS 设备中取出的数据的坐标系
国际地图提供商使用的坐标系

火星坐标 (GCJ-02)也叫国测局坐标系

中国标准,从国行移动设备中定位获取的坐标数据使用这个坐标系
国家规定: 国内出版的各种地图系统(包括电子形式),必须至少采用GCJ-02对地理位置进行首次加密。
(Google国内地图,搜搜、阿里云、高德地图、腾讯地图)。

百度坐标 (BD-09)

百度标准,百度 SDK,百度地图,Geocoding 使用
(本来就乱了,百度又在火星坐标上来个二次加密...

cesium根据输入角度设置中心点(俯视角度)

//该经纬度为90度俯视角时的在地图中心点
var latlng={lat:22.749373512,lng:114.58905555}
var angle=90//俯视角度,默认90°,可手动更改
//做计算
let centerLatlng=getCenterLatlng(latlng.lng, latlng.lat,158,8000/Math.tan(angle*Math.PI/180))

viewer.scene.camera.setView({
destination : Cesium.Cartesian3.fromDegrees(centerLatlng....

计算两个经纬度点之间的直线距离

/**
* 计算地图两点之前的直线距离
*/
function distanceCompute(log1, lat1, log2, lat2) {
let latOne = lat1 * Math.PI / 180.0;
let latTwo = lat2 * Math.PI / 180.0;
let LaDValue = latOne - latTwo; // 纬度第一点和第二点相差值
let LoDValue = log1 * Math.PI / 180.0 - log2 * Math.PI / 180.0; // 经度第一点和第二点相差值
let DValue...

GIS算法--已知一点经纬度,方位角,距离求另一点

http://www.movable-type.co.uk/scripts/latlong-nomodule.html
已知一个点A的经纬度坐标,点B相对与A的方位角,B到A的距离,求B的经纬度坐标,用Javascript语言来完成该算法,借用了一下openL
CommonFunc.caculate={
VincentyConstants : {
a: 6378137,
b: 6356752.3142,
f: 1/298.257223563
},
/**
*Calculate destination point ...

如何根据经纬度计算地面上某点在XYZ空间直角坐标系中的坐标

如何根据经纬度计算地面上某点在XYZ空间直角坐标系中的坐标

/**
* @param r: number 到地心的距离
* @param lon: number 经度
* @param lat: number 纬度
* @return {[number, number, number]}
*/
getXYZByLonLat = (r, lon, lat) => {
const {sin, cos, PI} = Math;
const lonRadian = lon / 180 * PI;
...

根据地图经纬度和层级获取元素坐标值

let TILE_SIZE = 256;/* 传入经纬度和地图层级获取像素坐标 */let project = (lat, lng, zoom) => { let siny = Math.sin(lat * Math.PI / 180); siny = Math.min(Math.max(siny, -0.9999), 0.9999); return { X: this.TILE_SIZE * (0.5 + lng / 360) * (1 << zoom), Y: this.TILE_SIZE * (0.5 - Math.log...

百度地图绘制扇形

function Sector1(point2, radius, sDegree, eDegree, pointCount) {
let points = []; //创建构成多边形的点数组
let step = ((eDegree - sDegree) / pointCount) || pointCount; //根据扇形的总夹角确定每步夹角度数
points.push(point2);
for (let i = sDegree; i < eDegree + 0.001; i += step) { //循环获取每步的圆弧上点的坐标,存入点数组 ...

文章标题:js地图库的使用,几种坐标之间的相互转换
文章链接:https://www.dianjilingqu.com/3943.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>