地址之间的距离 - 地理信息系统(4)

(2017-07-17 银河统计)

在哈尔滨市,从道里区通达街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: 经度   纬度 
球面距离:   (米) 

注:更改地址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、两个地址之间的驾车距离和时间

地址A 
地址B 
驾车距离  (米) 驾车时间  (分钟)

II、两个经纬度坐标之间的驾车距离和时间

地址A: 经度   纬度 
地址B: 经度   纬度 
驾车距离  (米) 驾车时间  (分钟)

注:两个地址或两个经纬度坐标之间的驾车时长和时间点有关,只是作完出行参考。驾车距离指标反映街区距离,在数据分析和建模中很是有用。两个地址能够先转换为经纬度再计算驾车距离,因此两个经纬度坐标之间的驾车或步行距离是基本街区距离指标

百度地图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));

四、步行距离和时间

地址A: 经度   纬度 
地址B: 经度   纬度 
步行距离  (米) 步行时间  (分钟)

注:两个地址或两个经纬度坐标之间的步行时长和时间点无关

百度地图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));

五、公交距离和时间

地址A: 经度   纬度 
地址B: 经度   纬度 
公交距离  (米) 公交时间  (分钟)

注:两个地址或两个经纬度坐标之间的公交时长和时间点有关

百度地图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的限制)。

相关文章
相关标签/搜索