2013-06-05 3 views
0

Этими функциями я получаю длину линии.Длина полилинии

  google.maps.LatLng.prototype.kmTo = function(a){ 
    var e = Math, ra = e.PI/180; 
    var b = this.lat() * ra, c = a.lat() * ra, d = b - c; 
    var g = this.lng() * ra - a.lng() * ra; 
    var f = 2 * e.asin(e.sqrt(e.pow(e.sin(d/2), 2) + e.cos(b) * e.cos 
    (c) * e.pow(e.sin(g/2), 2))); 
    return f * 6378.137; 
} 

google.maps.Polyline.prototype.inKm = function(n){ 
    var a = this.getPath(n), len = a.getLength(), dist = 0; 
    for (var i=0; i < len-1; i++) { 
     dist += a.getAt(i).kmTo(a.getAt(i+1)); 
    } 
    return dist; 
} 

И использование:

alert('Line Length: '+ poly1.inKm() +''); 

Все работает. Но у меня небольшая проблема. Сво показывает мне: >> Длина линии: 8,8 54502612255438 км < <

цифр долго я хочу его показать мне только 8.8, как я могу это сделать?

Извините за мой английский!

ответ

1

Try что-то вроде:

Math.floor(x * 10)/10 

где х это номер, который вы пытаетесь показать (8,854502612255438).

Вместо пола (который будет поворачиваться от 88,5 до 88), вы можете попробовать совершить раунд (который изменится на 88,5 до 89).

Редактировать - ах нет, это не будет работать, это будет потому, что ваш номер является строкой с «км» в конце (не заметил, что) ...

так ... попробуйте использовать parseFloat так:

Math.floor(parseFloat(x, 10) * 10)/10 

Вы должны добавить «км» до конца строки вашего собственного, так что полная вещь становится:

alert('Line Length: '+ (Math.floor(parseFloat(poly1.inKm(), 10) * 10)/10) +'km'); 
+0

Его работал !! Большое спасибо! –

Смежные вопросы