在哈爾濱市,從道里區通達街138號到道里區井街18號的距離是多少?這個問題能夠有多種答案。首先,將兩個地址進行地址解析,經緯度爲:算法
點A:哈爾濱市道里區通達街138號(126.616759,45.74989) 點B:哈爾濱市道里區井街18號(126.628442,45.786112)
墨卡託座標爲:數組
點A:哈爾濱市道里區通達街138號(14095066.5,5709461.47) 點B:哈爾濱市道里區井街18號(14096367.06,5715222.83)
根據地址和經緯度均可以計算出不一樣位置之間的距離,一般應該先將地址解析爲經緯度或墨卡託座標,而後再計算各類距離。app
已知兩點間平面座標(墨卡託座標)\(A(X_1, Y_1)\)、\(B(X_2, Y_2)\),根據歐氏距離公式,函數
\[S=\sqrt{(X_1 - X_2)^2+(Y_1 - Y_2)^2}=\sqrt{(14095066.5 - 14096367.06)^2+(5709461.47 - 5715222.83)^2}\approx 5906.33\]工具
能夠計算出兩點間直線距離爲5906.33像素。學習
已知兩點間經緯度座標\(A(JD_1, WD_1)\)、\(B(JD_2, WD_2)\),根據百度地圖API提供的算法計算球面距離,spa
注:更改地址A和地址B經緯度,點擊「計算球面距離」按鈕可計算出兩點間球面距離code
百度地圖API代碼(Javascript)排序
var point1 = new BMap.Point(126.616759, 45.74989); var point2 = new BMap.Point(126.628442, 45.786112); var distance = map.getDistance(point1,point2);
直線距離或球面距離屬於數學範疇的抽象距離。在城鎮中,兩個地址間的距離取決於街道距離或街道的連通性。一般分爲兩個地址間的的駕車距離、步行距離或公交距離及所需時間。ip
I、兩個地址之間的駕車距離和時間
II、兩個經緯度座標之間的駕車距離和時間
注:兩個地址或兩個經緯度座標之間的駕車時長和時間點有關,只是作完出行參考。駕車距離指標反映街區距離,在數據分析和建模中很是有用。兩個地址能夠先轉換爲經緯度再計算駕車距離,因此兩個經緯度座標之間的駕車或步行距離是基本街區距離指標
百度地圖API代碼(Javascript)
var transit = new BMap.DrivingRoute(map, {renderOptions: {map: map}, onSearchComplete: function (results){ if (transit.getStatus() != BMAP_STATUS_SUCCESS){return;} var plan = results.getPlan(0); alert(plan.getDistance(true)); //駕車距離 alert(plan.getDuration(true)); //駕車時間 }, onPolylinesSet: function(){setTimeout(function(){},"1000"); }}); transit.search(new BMap.Point(126.616759, 45.74989), new BMap.Point(126.628442, 45.786112));
注:兩個地址或兩個經緯度座標之間的步行時長和時間點無關
百度地圖API代碼(Javascript)
var Walking = new BMap.WalkingRoute(map, {renderOptions: {map: map}, onSearchComplete: function (results){ if (Walking.getStatus() != BMAP_STATUS_SUCCESS){return;} var plan = results.getPlan(0); alert(plan.getDistance(true)); //步行距離 alert(plan.getDuration(true)); //步行時間 }, onPolylinesSet: function(){setTimeout(function(){},"1000"); }}); Walking.search(new BMap.Point(126.616759, 45.74989), new BMap.Point(126.628442, 45.786112));
注:兩個地址或兩個經緯度座標之間的公交時長和時間點有關
百度地圖API代碼(Javascript)
var transit = new BMap.TransitRoute(map, {renderOptions: {map: map}, onSearchComplete: function (results){ if (transit.getStatus() != BMAP_STATUS_SUCCESS){return;} var plan = results.getPlan(0); alert(plan.getDistance(true)); //公交距離 alert(plan.getDuration(true)); //公交時間 }, onPolylinesSet: function(){setTimeout(function(){},"1000"); }}); transit.search(new BMap.Point(126.616759, 45.74989), new BMap.Point(126.628442, 45.786112));
一對多點距離計算能夠按不一樣距離搜索出離某一特定地址(點)最近的K個地址(點),技術結果在空間插值方法和數據挖掘技術中常常用到。
注:在下拉框中選擇直線距離或球面距離,可輸出距離(由小到大)表
操做步驟:
I、 重複點擊「計算距離」(節奏不用太快),直至當前項和經緯度數組長度相等; II、 點擊「距離列表」得到排序後的全部距離表格; III、點擊「數據重置」按鈕設置全部缺省參數,以便於從新計算。
注:一對多點駕車、步行和公交距離百度地圖API沒有批量處理功能,運用Javacript回調函數每次只能調回一對經緯度間的駕車、步行或公交距離。若是要計算1個經緯度點到10個經緯度點之間的距離,須要點擊10次「距離計算」按鈕
本文提供的各類距離計算工具僅用於我的學習或教學研究用途,不支持大批量商業用途的駕車、步行和公交距離計算(因爲百度地圖key的限制)。