2014-10-17 54 views
0

我用坐标创建了一个GPS系统。Javascript,找到第一个有效数字(取值范围从87.352到0.0002432)

我发现的最高和最低的经度和使用该功能纬度坐标:

var maxLng = 0; 
var maxLat = 0; 
    var minLng = 180; 
    var minLat = 180; 
    for(var i=0; i<coordinates.length; i++) 
    { 

    //get max coordinates (the +90 is to remove negative numbers) 
    if (coordinates[i][0]+90 > maxLat) 
    { 
     maxLat = coordinates[i][0] + 90; 
    } 

    if (coordinates[i][1]+90 > maxLng) 
    { 
     maxLng = coordinates[i][1]+ 90; 
    } 

    //get min coordinates 
    if (coordinates[i][0]+90 < minLat) 
    { 
     minLat = coordinates[i][0] + 90; 
    } 

    if (coordinates[i][1]+90 < minLng) 
    { 
     minLng = coordinates[i][1] + 90; 
    } 
    } 

    console.log(maxLat, maxLng,minLat, minLng); 

    //calculate distance between max and min points 
    var lngDistance = maxLng - minLng; 
    var latDistance = maxLat - minLat; 

    console.log(lngDistance, latDistance); 

此输出2个相隔最远的经度和纬度点,然后我打算使用创建一个基本之间的距离2D地图看起来像这样:

enter image description here

我需要点转换,也可以是一个有价值的范围,如:

0.0009321 19.332 1.9432123 0.0013432423 0.23432423 0.000034324

我想所有的数字基本转换为2个显著数字在小数点前面和存储,说明有多少班我都用过,结果在数组中。

我所要的输出是这样的(原来的号码,转换号码,使用移动):

[0.0009321, 93.21, 4] 
[19.332, 19.332, 0] 
[1.9432123, 19.432123, 1] 
[0.0013432423, 13.432423, 3] 
... 

我想找到的第一个显著数字再算上如何远离小数点这是。我发现了几篇关于使用REGEX的文章,但我从未使用REGEX。

有人可以给我一些指针吗?

干杯。

+1

正则表达式是错误的工具,以数字转换为2个显著数字 – nhahtdh 2014-10-17 08:33:38

+0

嗯好,谢谢nhahtdh,你能想到的任何工具,可以帮助我解决这个问题?被它困扰了好几个小时! – smj2393 2014-10-17 08:34:56

+0

你有什么样的预期结果? 0 19 2 0 0 0?或0.00093 19 1.9 0.0013 0.23 0.000034? – nhahtdh 2014-10-17 08:38:22

回答

1

这是一个有趣的搞清楚。

为你做了一个基本的功能,并且据我所见可以工作。

function change(data){ 
    var ret=new Array(); 
    for(var i=0,len=data.length;i<len;i++){ 
     // make string from number, remove the dot 
     var st=(''+data[i]).replace('.',''); 
     //remove leading zero's from string 
     var no_zero=st.replace(/^0+/,''); 
     //make value 
     var val=parseInt(no_zero)/(Math.pow(10,no_zero.length-2)); 
     //calculate amount of steps 
     var steps=Math.round(Math.log(Math.round(val/data[i]))/Math.log(10)); 

     //correction for floating point 
     if(data[i]<0.01)steps--; 

     ret.push([data[i],val,steps]); 
    } 
    return ret; 
} 

而且a working Fiddle

+0

非常感谢Michel!这正是我期待的! – smj2393 2014-10-17 11:08:14

+0

不客气。很高兴我能帮上忙。 – Michel 2014-10-17 11:13:39

相关问题