我正在尝试在距离我已创建的折线的起点处的某个距离处添加标记。 (我有一条带有起点和终点的折线,在这些点上有标记。我想在起始点的特定距离处添加标记。我尝试使用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的内容的任何建议
答案 0 :(得分:3)
函数.GetPointAtDistance是Mike Williams'epoly library for v2的一部分。这里有一个移植到v3的版本: http://www.geocodezip.com/scripts/v3_epoly.js
代码:
// === 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);
}