Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的距离数学以及在循环中实现它?_Javascript_Loops_Maps_Distance - Fatal编程技术网

JavaScript中的距离数学以及在循环中实现它?

JavaScript中的距离数学以及在循环中实现它?,javascript,loops,maps,distance,Javascript,Loops,Maps,Distance,我很难计算地图上几个点之间的距离: 我有一系列坐标,其中第一个坐标[“30.327547”,“59.919676”]是行程的开始,其他坐标是进站: var J = [ ["30.327547", "59.919676"], ["29.84964", "58.737619"], ["28.250252", "57.785994"], ["30.098912", "55.175885"], ["30.37357", "54.503783"], ["27

我很难计算地图上几个点之间的距离:

我有一系列坐标,其中第一个坐标[“30.327547”,“59.919676”]是行程的开始,其他坐标是进站:

var J = [
    ["30.327547", "59.919676"],
    ["29.84964", "58.737619"],
    ["28.250252", "57.785994"],
    ["30.098912", "55.175885"],
    ["30.37357", "54.503783"],
    ["27.572056", "53.898325"],
    ["26.000193", "53.11856"]
])

接下来,要从该坐标在地图上创建地质点,我应该使用特殊的Yandex Maps API函数YMaps。地质点:

var a=new YMaps.GeoPoint(30.327547,59.919676);
var b=new YMaps.GeoPoint(29.84964,58.737619);
var c=new YMaps.GeoPoint(28.250252,57.785994);
var d=new YMaps.GeoPoint(30.098912,55.175885);
var e=new YMaps.GeoPoint(30.37357,54.503783);
var f=new YMaps.GeoPoint(27.572056,53.898325);
var g=new YMaps.GeoPoint(26.000193,53.11856);
最后,为了计算点之间的距离,我使用另一个API函数“point1.distance(point2)”:

这非常有效(我还将每个结果转换为格式(结果km)),结果是:

    console.log(YMaps.humanDistance(d1));console.log(YMaps.humanDistance(d2));console.log(YMaps.humanDistance(d3));
    console.log(YMaps.humanDistance(d4));console.log(YMaps.humanDistance(d5));console.log(YMaps.humanDistance(d6));

//{"Point1":"134 km.","Point2":"275 km.","Point3":"586 km.","Point4":"663 km.","Point5":"857 km.","Point6":"992 km."}
我实际上想要在循环中进行这些操作:

for(var i=0;i<J.length;i++){

    // Iteratting through the array of points of J and creating Geoobjects on the map, dynamically putting them into public variables "temp_*"
    window["temp_" + i]=new YMaps.GeoPoint(J[i][0],J[i][1]);

    //next point
    var next=i+1;
    //master point (the begin of trip)
    var master=window["temp_0"];


    //calculating the distance between the master point and actual [i] point in the loop
    var formula=master.distance(window["temp_"+i]);

    // calculating the distance between the actual [i] point and the next in the loop
    var formula2=window["temp_" + i].distance(window["temp_"+next]);


    //summing and converting into human format and dinamically putting them into variables "result_*"
    window["result_"+i]=YMaps.humanDistance(formula+formula2);

    //logging the results
    console.log(YMaps.humanDistance(window["result_"+i]));
    }

for(var i=0;i变量
J
是您声明的一个二维字符串数组,从我看到的
ymap。GeoPoint
函数需要一个数字。因此请尝试解析:

window['temp_' + i] = new YMaps.GeoPoint(
    parseFloat(J[i][0]), 
    parseFloat(J[i][1])
);

更新:

以下是您的代码的错误:

var formula=master.distance(window["temp_"+i]);
var formula2=window["temp_" + i].distance(window["temp_"+next]);
window["result_"+i]=YMaps.humanDistance(formula+formula2);
在每次迭代中,重新声明
公式2
变量,并在计算当前点之间的人类距离时。您需要累积总和,因此在循环外部声明变量,并在循环内部添加:

var sum = 0;
for(var i = 0; i < J.length - 1; i++) {
    var p1 = new YMaps.GeoPoint(J[i][0], J[i][1]);
    var p2 = new YMaps.GeoPoint(J[i + 1][0], J[i + 1][1]);
    sum += p1.distance(p2);
    console.log(YMaps.humanDistance(sum);
}
var总和=0;
对于(变量i=0;i

请注意,循环结束于
J.length-1
:例如,对于7个点,您有6个距离。

它在不使用parseFloat的情况下解析得很好,但我的困难是实现这种依赖关系:var d1=a.distance(b);//distance 1 var d2=a.distance(b)+b.distance(c);//distance 2 var d3=a.distance(b)+b.distance(c)+c.distance(d)…在每次计算中,下一个点在哪里增加?如果不在循环外使用动态变量窗口[“temp_”+i],我怎么做?
var sum = 0;
for(var i = 0; i < J.length - 1; i++) {
    var p1 = new YMaps.GeoPoint(J[i][0], J[i][1]);
    var p2 = new YMaps.GeoPoint(J[i + 1][0], J[i + 1][1]);
    sum += p1.distance(p2);
    console.log(YMaps.humanDistance(sum);
}