如何创建折线上的标记,与折线上另一个标记相距一定距离 - GoogleMaps API Javascript V3

时间:2014-03-22 17:47:26

标签: javascript google-maps google-maps-api-3

我正在尝试在距离我已创建的折线的起点处的某个距离处添加标记。 (我有一条带有起点和终点的折线,在这些点上有标记。我想在起始点的特定距离处添加标记。我尝试使用poly.GetPointsAtDistance(距离)方法,但显然它已不再使用了我已经查看了不同的帖子和google Maps Api但是还没有成功使它成功。 我有

 var line = new google.maps.Polyline({
 map: map, 
 path: [location1, location2],
 strokeWeight: 7,
 strokeOpacity: 0.8,
 strokeColor: "#FFAA00"
});

我有折线的长度

 var line_length = google.maps.geometry.spherical.computeLength(line.getPath());)

我有一个创建标记的功能:

 function createMarker(map, latlng, title){
 var marker = new google.maps.Marker({
    position:latlng,
    map:map,
      title: title
      });

我希望能够通过给出距离(new_distance)从起点开始创建标记。 在类似的事情中:

createMarker(map, line.GetPointAtDistance(new_distance), title);

有关替换GetPointAtDistance的内容的任何建议

1 个答案:

答案 0 :(得分:3)

函数.GetPointAtDistance是Mike Williams'epoly library for v2的一部分。这里有一个移植到v3的版本: http://www.geocodezip.com/scripts/v3_epoly.js

example using it on v3

代码:

// === A method which returns a google.maps.LatLng of a point a given distance along the path ===
// === Returns null if the path is shorter than the specified distance ===
google.maps.Polyline.prototype.GetPointAtDistance = function(metres) {
  // some awkward special cases
  if (metres == 0) return this.getPath().getAt(0);
  if (metres < 0) return null;
  if (this.getPath().getLength() < 2) return null;
  var dist=0;
  var olddist=0;
  for (var i=1; (i < this.getPath().getLength() && dist < metres); i++) {
    olddist = dist;
    dist += google.maps.geometry.spherical.computeDistanceBetween(
              this.getPath().getAt(i),
              this.getPath().getAt(i-1)
            );
  }
  if (dist < metres) {
    return null;
  }
  var p1= this.getPath().getAt(i-2);
  var p2= this.getPath().getAt(i-1);
  var m = (metres-olddist)/(dist-olddist);
  return new google.maps.LatLng( p1.lat() + (p2.lat()-p1.lat())*m, p1.lng() + (p2.lng()-p1.lng())*m);
}

需要google.maps.geometry library