zoukankan      html  css  js  c++  java
  • 地址之间的距离

    (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)
    

    根据地址和经纬度都可以计算出不同位置之间的距离,通常应该先将地址解析为经纬度或墨卡托坐标,然后再计算各种距离。

    1、直线距离

    已知两点间平面坐标(墨卡托坐标)(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像素。

    2、球面距离

    已知两点间经纬度坐标(A(JD_1, WD_1))(B(JD_2, WD_2)),根据百度地图API提供的算法计算球面距离,

    地址A: 经度  纬度 
    地址B: 经度  纬度 
    球面距离:  (米) 

    注:更改地址A和地址B经纬度,点击“计算球面距离”按钮可计算出两点间球面距离

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

    3、驾车距离和时间

    直线距离或球面距离属于数学范畴的抽象距离。在城镇中,两个地址间的距离取决于街道距离或街道的连通性。通常分为两个地址间的的驾车距离、步行距离或公交距离及所需时间。

    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));
    

    4、步行距离和时间

    地址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));
    

    5、公交距离和时间

    地址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));
    

    6、一对多点直线和球面距离计算

    一对多点距离计算可以按不同距离搜索出离某一特定地址(点)最近的K个地址(点),技术结果在空间插值方法和数据挖掘技术中经常用到。

    经度  纬度 

    不同距离选项: 

    注:在下拉框中选择直线距离或球面距离,可输出距离(由小到大)表

    7、一对多点驾车、步行和公交距离计算

    经度  纬度 

    经纬度数组长度  当前项        

    操作步骤:

    I、  重复点击“计算距离”(节奏不用太快),直至当前项和经纬度数组长度相等;
    II、 点击“距离列表”获得排序后的所有距离表格;
    III、点击“数据重置”按钮设置所有缺省参数,以便于重新计算。
    

    注:一对多点驾车、步行和公交距离百度地图API没有批量处理功能,运用Javacript回调函数每次只能调回一对经纬度间的驾车、步行或公交距离。如果要计算1个经纬度点到10个经纬度点之间的距离,需要点击10次“距离计算”按钮

    本文提供的各种距离计算工具仅用于个人学习或教学研究用途,不支持大批量商业用途的驾车、步行和公交距离计算(由于百度地图key的限制)。

  • 相关阅读:
    Java Stax操作XML简介
    使用JAXB来实现Java合xml之间的转换
    WebService学习笔记系列(四)
    JavaWeb学习笔记总结 目录篇
    成为谷歌的java程序员首先要做到这五点!
    Java实现快速排序
    二叉树遍历(Java实现)
    Java单链表反转
    学好java,做好工程师必读的15本书
    最全前端资源汇集
  • 原文地址:https://www.cnblogs.com/cloudtj/p/7196981.html
Copyright © 2011-2022 走看看