js代碼中召川,let/var 表示變量扮宠,系統(tǒng)自動(dòng)推斷變量類(lèi)型。let x = 3坛增,相當(dāng)于 c語(yǔ)言的 int x = 3;
1米距離對(duì)應(yīng)的經(jīng)緯度度數(shù):
// 子午線 周長(zhǎng) 40,009km
// 1 米 對(duì)應(yīng)的緯度數(shù)
latitudeDegreesFor1Meter() {
return 1.0/(40009000/360.0)
},
// 赤道周長(zhǎng) 40,076km
// 1 米 對(duì)應(yīng)的經(jīng)度數(shù)
longitudeDegreesFor1Meter() {
return 1.0/(40076000/360.0)
},
1度對(duì)應(yīng)的距離-米
// 子午線 周長(zhǎng) 40,009km
// 1 緯度對(duì)應(yīng)的米數(shù)
metersFor1latitudeDegrees() {
return 40009000/360.0
},
// 赤道周長(zhǎng) 40,076km
// 1 經(jīng)度對(duì)應(yīng)的米數(shù)
metersFor1longitudeDegrees() {
return 40076000/360.0
},
兩個(gè)地理坐標(biāo)點(diǎn)之間距離換算
// 傳入坐標(biāo)收捣,返回距離,單位 米
// 僅適合不跨越 東西罢艾、南北半球的兩個(gè)坐標(biāo)
distance(fromLat, fromLng, toLat, toLng) {
let fromLatNum = util.getNumber(fromLat) // fromLat 可能是string咐蚯,或number或其他類(lèi)型。util.getNumber()確保它是number春锋,或NaN
let fromLngNum = util.getNumber(fromLng)
let toLatNum = util.getNumber(toLat)
let toLngNum = util.getNumber(toLng)
let distance = -1
if(isNaN(fromLatNum) || isNaN(fromLngNum) || isNaN(toLatNum) || isNaN(toLngNum)) {
}else {
let meters_lat = Math.abs((toLatNum - fromLatNum)*this.metersFor1latitudeDegrees())
let meters_lng = Math.abs((toLngNum - fromLngNum)*this.metersFor1longitudeDegrees())
let pow_lat = Math.pow(meters_lat, 2)
let pow_lng = Math.pow(meters_lng, 2)
distance = Math.sqrt(pow_lat + pow_lng)
distance = Math.ceil(distance)
}
return distance
},
備注:計(jì)算坐標(biāo)點(diǎn)距離時(shí)期奔,必須先在經(jīng)度線和緯度線方向分別計(jì)算距離,得到以米為單位的邊長(zhǎng)呐萌,再利用勾股定理計(jì)算斜邊長(zhǎng)。
如果你拿經(jīng)度差和緯度差直接求斜邊‘度數(shù)’罗晕,那這個(gè)‘度數(shù)’是沒(méi)有意義的渠旁,因?yàn)榻?jīng)度一度和緯度一度它的長(zhǎng)度是不同的,你直接求出的斜邊‘度數(shù)’是按經(jīng)度粤铭,還是緯度換算長(zhǎng)度呢杂靶?(舉例說(shuō)酱鸭,你經(jīng)度差是3度垛吗,緯度差是4度,斜邊就是5‘度’蔚舀,但斜邊這個(gè)‘度’是沒(méi)有定義锨络,沒(méi)有意義的,因?yàn)閮蓚€(gè)直角邊的單位不一樣羡儿,一個(gè)是經(jīng)度一個(gè)是緯度;)缅叠。當(dāng)然虏冻,經(jīng)緯度每一度代表的距離,差距也不算太大狼犯。再加上地球是圓的领铐,我們構(gòu)造的‘三角形’宋舷,實(shí)際上兩條斜邊都是地球的弧,所以計(jì)算結(jié)果也沒(méi)那么精確祝蝠。