使用javascript或jquery的几何(CONVOLUTION)函数

我尝试这样做3个月 – 我需要按路线方向创建一个多边形,如下所示:

http://i.imgur.com/olGmuN6.png

所以我写这个:

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

但在某些情况下在某些情况下是好的,所以我的代码产生了这个:

不好的情况

http://i.stack.imgur.com/w5lqL.png

好的案例:

http://i.stack.imgur.com/DH88N.jpg

那么如何通过路线方向解决这个问题呢? 有事吗?

我如何在我的代码中实现它:

卷积算法

http://i.imm.io/1gMu5.png

我的问题有什么解决方案吗?

还有其他方法来创造我需要的东西吗?

产生第二图像的算法在几何上非常简单。 假设你有一个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) 

你必须在路径的尽头注意只选择前后坐标,但你明白了。 最终得到三组坐标轨迹。 如果您想平滑路径,可以将其设置为平均几个点。

好的,所以这里的代码是可行的,但你必须做一些工作来平滑它以解决路径中的抖动。 我的建议是平均几个先前的积分,或者只是拿回几个点。

http://jsbin.com/uTATePe/2/