我尝试这样做3个月-我需要按如下所示的路线方向创建多边形:
所以我这样写:
directionService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
var r = [];
var z = 0.5;
var bla = result.routes[0].overview_path;
for(var i=0 in result.routes[0].overview_path) {
r.push(new google.maps.LatLng(bla[i].lat()+z, bla[i].lng()-z));
}
bla.reverse();
for(var x=0 in bla) {
r.push(new google.maps.LatLng(bla[x].lat()-z, bla[x].lng()+z));
}
var prva = new google.maps.Polyline({
path: result.routes[0].overview_path,
strokeColor: "#00000",
strokeOpacity: 1.0,
strokeWeight: 2
});
prva.setMap(map);
druga = new google.maps.Polygon({
paths: r,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#FF0000",
fillOpacity: 0.35
});
druga.setMap(map);
} else {
alert("Directions query failed: " + status);
}
});
但是在某些情况下在某些情况下不是很好,所以我的代码会产生以下结果:
坏情况:
好案例:
那么我该如何解决此问题以通过路线方向获得漂亮的多边形呢?有什么想法吗?
如何将其实现到我的代码中:
卷积算法
我的问题有解决方案吗?
除此之外,还有其他方法可以创建我需要的吗?
解决方法:
产生第二张图像的算法在几何上非常简单.假设您有一个x,y数组,我将为您编写一些伪代码:
coordinates = [[x1,y1],[x2,y2] ... [xn,yn]]
leftcoords = []
rightcoords = []
projectionwidth = 1 # How wide the path is
for each coordinate in coordinates:
pathvector = coordinate(index + 1) - coordinate(index - 1)
normpathvector = pathvector/(length(pathvector))
perpvector = projectionwidth*[-normpathvector[1],normpathvector[0]]
leftcoords.append(coordinate + perpvector)
rightcoords.append(coordinate - perpvector)
您只需要在路径的末尾注意,只选择前面或后面的坐标,就可以了.您最终得到了三组坐标轨迹.如果您想平滑路径,可以将其设置为平均几个点.
好的,这是可以工作的代码,但是您必须做一些工作以使其平滑以解决路径中的抖动.我的建议是将之前的几个点取平均值,或者将几个点取回.