How to add markers on Google Maps polylines based on distance along the line?

后端 未结 5 1675
小蘑菇
小蘑菇 2020-12-02 07:12

I am trying to create a Google Map where the user can plot the route he walked/ran/bicycled and see how long he ran. The GPolyline class with it’s getLeng

5条回答
  •  一向
    一向 (楼主)
    2020-12-02 07:59

    I found out why I had the inexactitude. Actually in V3 of GMap, we don't have the function "getLength" anymore that return the length in Km or Meters of the polyLine.

    here's the prototypes for the required function - hope this helps any further:

    google.maps.Polygon.prototype.Distance = function() {
       var dist = 0;
       for (var i=1; i < this.getPath().getLength(); i++) {
          dist += this.getPath().getAt(i).distanceFrom(this.getPath().getAt(i-1));
       }
       return dist;
    }
    
    google.maps.LatLng.prototype.distanceFrom = function(newLatLng) {
        //var R = 6371; // km (change this constant to get miles)
        var R = 6378100; // meters
        var lat1 = this.lat();
        var lon1 = this.lng();
        var lat2 = newLatLng.lat();
        var lon2 = newLatLng.lng();
        var dLat = (lat2-lat1) * Math.PI / 180;
        var dLon = (lon2-lon1) * Math.PI / 180;
        var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
          Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 ) *
          Math.sin(dLon/2) * Math.sin(dLon/2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        var d = R * c;
        return d;
    }
    

    source

提交回复
热议问题