Javascript 谷歌地图-如何以米为单位计算两点之间的距离?

Javascript 谷歌地图-如何以米为单位计算两点之间的距离?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我有以下几点: (45.463688, 9.18814) (46.0438317, 9.75936230000002) 我需要(我想是TroughtGoogleAPIv3)得到这两个点之间的距离,单位是米。我怎么做 与编码无关,顺便说一句 编辑 如果你正在寻找一些代码 我认为您可以不使用任何特定的API,使用普通Javascript计算距离: 该网站有很好的地理计算信息和距离计算的Javascript示例 好的,快速浏览一下Google API页面,您可以通过以下方式完成: 调用Direc

我有以下几点:

(45.463688, 9.18814) 
(46.0438317, 9.75936230000002)
我需要(我想是TroughtGoogleAPIv3)得到这两个点之间的距离,单位是米。我怎么做

与编码无关,顺便说一句

编辑 如果你正在寻找一些代码


我认为您可以不使用任何特定的API,使用普通Javascript计算距离:

该网站有很好的地理计算信息和距离计算的Javascript示例

好的,快速浏览一下Google API页面,您可以通过以下方式完成:

  • 调用DirectionService().route()以获取路由
  • 对于一条或每条路线,通过其支腿属性并计算距离之和

  • 这主要是通过GoogleAPI之外的数学实现的,因此除了找到正确的坐标之外,不需要使用api进行任何操作

    知道了这一点,这里有一个链接指向先前回答的与Javascript相关的问题


    如果您希望使用v3谷歌地图API,请使用以下函数: 注意:必须将
    &libraries=geometry
    添加到脚本源中

    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>
    
    <script>
    var p1 = new google.maps.LatLng(45.463688, 9.18814);
    var p2 = new google.maps.LatLng(46.0438317, 9.75936230000002);
    
    alert(calcDistance(p1, p2));
    
    //calculates distance between two points in km's
    function calcDistance(p1, p2) {
      return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
    }
    
    </script>
    
    
    var p1=新的google.maps.LatLng(45.463688,9.18814);
    var p2=新的google.maps.LatLng(46.0438317,9.75936230000002);
    警报(钙距离(p1、p2));
    //以公里为单位计算两点之间的距离
    功能钙距离(p1、p2){
    返回(google.maps.geometry.spheremic.computedDistancebetween(p1,p2)/1000.toFixed(2);
    }
    
    试试这个

     CLLocationCoordinate2D coord1;
     coord1.latitude = 45.463688;
     coord1.longitude = 9.18814;
     CLLocation *loc1  = [[[CLLocation alloc] initWithLatitude:coord1.latitude longitude:coord1.longitude] autorelease];
    
     CLLocationCoordinate2D coord2;
     coord2.latitude = 46.0438317;
     coord2.longitude = 9.75936230000002;
     CLLocation *loc2  = [[[CLLocation alloc] initWithLatitude:46.0438317 longitude:9.75936230000002] autorelease];
    
     CLLocationDistance d1 = [loc1 distanceFromLocation:loc2];
    
    试试这个:

    const const toRadians = (val) => {
        return val * Math.PI / 180;
    }
    const toDegrees = (val) => {
        return val * 180 / Math.PI;
    }
    // Calculate a point winthin a circle
    // circle ={center:LatLong, radius: number} // in metres
    const pointInsideCircle = (point, circle) => {
        let center = circle.center;
        let distance = distanceBetween(point, center);
    
        //alert(distance);
        return distance < circle.radius;
    };
    
    const distanceBetween = (point1, point2) => {
       //debugger;
       var R = 6371e3; // metres
       var φ1 = toRadians(point1.latitude);
       var φ2 = toRadians(point2.latitude);
       var Δφ = toRadians(point2.latitude - point1.latitude);
       var Δλ = toRadians(point2.longitude - point1.longitude);
    
       var a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
               Math.cos(φ1) * Math.cos(φ2) *
               Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
       var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    
       return R * c;
    }
    
    const toRadians=(val)=>{
    返回值*Math.PI/180;
    }
    常数toDegrees=(val)=>{
    返回val*180/Math.PI;
    }
    //计算圆上的点
    //圆={中心:LatLong,半径:number}//以米为单位
    const pointInsideCircle=(点,圆)=>{
    设中心=圆。中心;
    让距离=之间的距离(点、中心);
    //警戒(距离);
    返回距离<圆半径;
    };
    常量距离=(点1,点2)=>{
    //调试器;
    var R=6371e3;//米
    varφ1=环面(点1.纬度);
    varφ2=环面(点2.纬度);
    varΔφ=环面(点2.纬度-点1.纬度);
    varΔλ=环面(点2.经度-点1.经度);
    var a=数学sin(Δφ/2)*数学sin(Δφ/2)+
    数学cos(φ1)*数学cos(φ2)*
    数学sin(Δλ/2)*数学sin(Δλ/2);
    var c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));
    返回R*c;
    }
    

    参考资料:

    您是指整个路径长度中的距离,还是只想知道位移(直线距离)?我看没有人指出距离和位移之间的区别。对于距离,计算JSON/XML数据给出的每个路由点,对于位移,有一个内置的解决方案,使用
    球形
    类。

    您是指整个路径长度中的距离,还是只想知道位移(直线距离)?我看没有人指出距离和位移之间的区别。对于距离,计算JSON/XML数据给出的每个路由点,对于位移,有一个内置的解决方案,使用
    spherec
    class。这个想法是,如果你指的是距离,那么你只需在每个路径点上使用
    computedIstanceBeween
    ,并将其连接起来

    //calculates distance between two points in km's
    function calcDistance(p1, p2) {
      return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
    }
    

    我添加了使用示例,您需要通过2个坐标。它对我有效,返回78.35请不要忘记将问题标记为已回答,以帮助将来的人们找到正确答案。这是否返回以英里或公里为单位的值?正如注释所述://在km的
    console.log中计算两点之间的距离(calcDistance(“45.463688,9.18814”,“46.0438317,9.75936230000002”)
    它返回NaN,因为我们向
    calDistance
    提供字符串。尝试将其设置为
    console.log(calcDistance(45.463688,9.18814,46.0438317,9.7593623000002))谢谢你的第一个链接。近距离的计算可以通过使用近似公式来进行优化,以获得两点之间的路线距离,这只是给出了直接距离(在物理文献中:位移),如何获得路线距离这是目标C:)问题是关于谷歌地图的Javascript API请提供解释,而不是“尝试这个”。如果您使用距离矩阵api计算距离和旅行时间,则可以使用距离矩阵api。完整答案请参阅。为什么它更好,它是如何工作的,等等。“试试这个”是不够的。Stackoverflow不是盲目尝试,而是阅读和理解事物是如何工作的。仍然感谢您的贡献:)