const R = 6370996.81; // 地球半径(米)
const p = null;
const j = 0;
const Ib = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
/**
* @return {string}
*/
function Jb(a) {
let b = '';
let c;
let d;
let e = '';
let f;
let g = '';
let i = 0;
f = /[^A-Za-z0-9\+\/\=]/g;
if (!a || f.exec(a)) return a;
a = a.replace(/[^A-Za-z0-9\+\/\=]/g, '');
do {
c = Ib.indexOf(a.charAt(i++)),
d = Ib.indexOf(a.charAt(i++)),
f = Ib.indexOf(a.charAt(i++)),
g = Ib.indexOf(a.charAt(i++)),
c = c << 2 | d >> 4,
d = (d & 15) << 4 | f >> 2,
e = (f & 3) << 6 | g,
b += String.fromCharCode(c), f != 64 && (b += String.fromCharCode(d)), g != 64 && (b += String.fromCharCode(e));
}
while (i < a.length);
return b;
}
/**
* @return {boolean}
*/
function Za(a) {
return typeof a === 'string';
}
function Point(a, b) {
isNaN(a) && (a = Jb(a), a = isNaN(a) ? 0 : a);
Za(a) && (a = parseFloat(a));
isNaN(b) && (b = Jb(b), b = isNaN(b) ? 0 : b);
Za(b) && (b = parseFloat(b));
this.lng = a;
this.lat = b;
}
Point.prototype.mb = function (a) {
return a && this.lat === a.lat && this.lng === a.lng
};
function OD(a, b, c) {
for (; a > c;) a -= c - b;
for (; a < b;) a += c - b;
return a;
}
/**
* @return {number}
*/
function SD(a, b, c) {
b !== p && (a = Math.max(a, b));
c !== p && (a = Math.min(a, c));
return a;
}
/**
* @return {number}
*/
function Tk(a) {
return Math.PI * a / 180;
}
/**
* @return {number}
*/
function Pe(a, b, c, d) {
return R * Math.acos(Math.sin(c) * Math.sin(d) + Math.cos(c) * Math.cos(d) * Math.cos(b - a));
}
/**
* @return {number}
*/
function Vo(a, b) {
if (!a || !b) return 0;
a.lng = OD(a.lng, -180, 180);
a.lat = SD(a.lat, -74, 74);
b.lng = OD(b.lng, -180, 180);
b.lat = SD(b.lat, -74, 74);
return Pe(Tk(a.lng), Tk(b.lng), Tk(a.lat), Tk(b.lat));
}
function distance(a, b) {
if (a && b) {
if (a.mb(b)) return 0;
let c;
c = Vo(a, b);
if (c === p || c === j) c = 0;
return c;
}
return false;
}
export function getDistance(lat1, lng1, lat2, lng2) {
if (lat1 && lng1 && lat2 && lng2) {
const p1 = new Point(lat1, lng1);
const p2 = new Point(lat2, lng2);
return (distance(p1, p2) / 1000) .toFixed(2);
} else {
return null
}
}
// 获得距离
const d = getDistance(lng_1, lat_1, lng_2, lat_2)
js 根据经纬度计算两地距离
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 翻看了下资料计算地球表面两点间的距离大概有两种办法。第一种是默认地球是一个光滑的球面,然后计算任意两点间的距离,这...