Ruslan Butdayev
Ruslan Butdayev

Reputation: 3

Polyline Length

I get line length by this functions.

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

And use :

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

Everything working. But i have a small problem. Its shows me: >> Line Length: 8.854502612255438km <<

Digits is to long i want it show me only 8.8 how can i do it?

Sorry for my english!

Upvotes: 0

Views: 167

Answers (1)

zod
zod

Reputation: 2788

Try something like:

Math.floor(x * 10) / 10

Where x is the number you are trying to show (8.854502612255438).

Instead of floor (which will turn 88.5 to 88) you may want to try round (which will turn 88.5 to 89).

Edit - ah no, that won't work will it because your number is a string with 'km' at the end (did not spot that)...

so... try using parseFloat like this:

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

You would have to add 'km' to the end of the string your self, so the full thing becomes:

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

Upvotes: 1

Related Questions