首页
/
每日頭條
/
生活
/
js計算點到直線的距離
js計算點到直線的距離
更新时间:2026-03-15 00:17:20

最近在做有關車輛定位及曆史軌迹的項目,需要顯示車輛當前位置信息、車輛曆史軌迹及行駛公裡數,需要這樣的效果。

js計算點到直線的距離(js根據經緯度換算行駛裡程)1

軌迹回放使用的百度的路書功能,包含了開始、暫定、重置功能,但是後台返回的數據隻包含了坐标點,

js計算點到直線的距離(js根據經緯度換算行駛裡程)2

行駛裡程數需要前台頁面計算。開始查資料,百度提供計算裡程的api,提供開始和結束的幾個坐标點,再選擇是騎車、步行、駕車、是否走高速之類的條件,百度自動計算行車裡程,但是這種誤差相對比較大,于是放棄。換了另一種方案,根據兩個坐标點計算段之間的距離,再累加,這種計算的是實際行駛的裡程,開始coding。

先找到計算兩個坐标點之間距離的方法

// 計算兩個坐标點距離 getFlatternDistance(lon1, lat1, lon2, lat2) { var DEF_PI = 3.14159265359; // PI var DEF_2PI = 6.28318530712; // 2*PI var DEF_PI180 = 0.01745329252; // PI/180.0 var DEF_R = 6370693.5; // radius of earth var ew1, ns1, ew2, ns2; var dx, dy, dew; var distance; // 角度轉換為弧度 ew1 = lon1 * DEF_PI180; ns1 = lat1 * DEF_PI180; ew2 = lon2 * DEF_PI180; ns2 = lat2 * DEF_PI180; // 經度差 dew = ew1 - ew2; // 若跨東經和西經180 度,進行調整 if (dew > DEF_PI) dew = DEF_2PI - dew; else if (dew < -DEF_PI) dew = DEF_2PI dew; dx = DEF_R * Math.cos(ns1) * dew; // 東西方向長度(在緯度圈上的投影長度) dy = DEF_R * (ns1 - ns2); // 南北方向長度(在經度圈上的投影長度) // 勾股定理求斜邊長 distance = Math.sqrt(dx * dx dy * dy).toFixed(0); return distance; }

獲取坐标集合,調用計算公式

// 計算裡程數 calculateMileage(history) { let mileage = 0; for (let i = 0; i < history.length - 1; i ) { mileage = parseInt( this.getFlatternDistance( history[i].longitude, history[i].latitude, history[i 1].longitude, history[i 1].latitude ) ); } this.mileage = mileage == 0 ? "--:--" : (mileage / 1000).toFixed(2) "公裡"; }

mileage就是最後的裡程數。看下計算時間

js計算點到直線的距離(js根據經緯度換算行駛裡程)3

749個坐标點,用時1.39501953125ms,對頁面顯示影響不大。至此結束。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
餡餅的面怎麼和才軟竅門
餡餅的面怎麼和才軟竅門
想要把餡餅的面和得很軟的話,可以用熱水來和面,這樣就能燙壞面粉裡面的面筋,從而讓面團變得柔軟。若是我們想要面團也有點嚼勁的話,就可以把面粉分為兩份,然後用熱水、冷水分别将它們揉成面團再把它們揉在一起即可。怎麼把餡餅的面和軟 如果我們想要把用來制作餡餅的面和得很軟的話,可以往面粉中加入熱水再将它揉成面...
2026-03-15
閑魚可以發視頻嗎
閑魚可以發視頻嗎
随着時代的發展,現在市面上有很多電商購物平台,有主打新産品的,也有主打二手閑置用品的,其中閑魚還是非常受歡迎的,網購大家都想全面了解産品,那麼那麼閑魚可以發視頻嗎?閑魚怎麼發視頻?下面小編為大家帶來閑魚發視頻方法介紹,感興趣的小夥伴一起來看一下吧。閑魚可以發視頻嗎?首先打開閑魚APP并登錄淘寶賬号,...
2026-03-15
水煮菱角可以過夜吃嗎
水煮菱角可以過夜吃嗎
水煮菱角若沒有變質、變味、發黴,那它過夜了也是可以吃的,我們可以把煮好的菱角放在太陽下曬幹,這樣它能保存更久。煮菱角需要先把菱角清洗幹淨,然後把它和調味料、香料放入鍋中煮熟并焖一會即可。水煮菱角過夜之後是可以吃的,隻要它沒有出現變質、變味、發黴等現象就可以了。如果我們一次性煮太多菱角無法盡早吃完的話...
2026-03-15
電壓力鍋烤紅薯放水嗎
電壓力鍋烤紅薯放水嗎
用電壓力鍋制作烤紅薯是不需要放水的,我們隻需要将大小接近的數個紅薯清洗幹淨,再把它放入電壓力鍋中用蛋糕功能加熱即可,等我們能用筷子輕易的穿透紅薯的時候,就可以将它們取出來食用了。用電壓力鍋烤紅薯需要加水嗎 我們在用電壓力鍋烤紅薯的時候是不用往鍋中放水的,隻需要先挑選幾個大小均勻的地瓜并将它們清洗幹淨...
2026-03-15
水玻璃是什麼
水玻璃是什麼
水玻璃是矽酸鈉的水溶液,将它塗抹在金屬的表面可以使得金屬不受酸、堿腐蝕,它也可以用來粘合木材、陶瓷、玻璃等材料,還可以用來制作固染劑、媒染劑。它的主要成分矽酸鈉是種礦黏合劑,可制作肥皂、織物防火劑等物。什麼是水玻璃 水玻璃是一般是用來指矽酸鈉的水溶液,它的主要成分矽酸鈉則是一種礦黏合劑,它除了可用作...
2026-03-15
Copyright 2023-2026 - www.tftnews.com All Rights Reserved