折线周围的长度缓冲区

我不擅长数学,所以我遇到了问题。 我有一条路线从一个到另一个分散。 有一段时间我试图在固定长度的路线上应用彩色地块。 但是我不能得到一个圆润的角落,而我缺乏数学能力让我失去了很多。

现在我明白了 在此处输入图像描述

和代码

var r = []; var bla = result.routes[0].overview_path; for(i in result.routes[0].overview_path) { r.push(new google.maps.LatLng(bla[i].lat()+z, bla[i].lng()-z)); } bla.reverse(); for(x in bla) { r.push(new google.maps.LatLng(bla[x].lat()-z, bla[x].lng()+z)); } var kelias = new google.maps.Polyline({ path: result.routes[0].overview_path, strokeColor: "#00000", strokeOpacity: 1.0, strokeWeight: 2 }); kelias.setMap(MAP); fonas = new google.maps.Polygon({ paths: r, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35 }); fonas.setMap(MAP); 

我只想询问一些信息指示,或者你们中的一些人已经完成了这项function并拥有一些function

在这里工作演示 。 不知怎的,我需要得到相同的绘制结果。

解决方案

  • 使用JSTS lib的缓冲折线。
  • ArcGIS服务器解决方案

我在SO Path笔画算法中找到了这个堆栈(转换为三角形/四边形)或其他有类似问题的建议 ,仅适用于C ++。

答案是本PDF( http://dev.gentoo.org/~dberkholz/tutorials/cairo/siggraph.pdf )第3页(CONVOLVE算法)中的算法。

如果您可以在JSFiddle中创建一个工作示例,我们可以在那里编写解决方案。

– 编辑

经过一段时间分析你为生命演示提供的链接中的脚本,我发现,折线不是用javascript计算的,而是在服务器上计算并通过对某些PERL程序的AJAX调用返回。

难道你不能在与第一条相同的路径上绘制另一条折线,行程更大吗? 它没有给出完全相同的结果,即边框颜色与填充颜色不同的多边形,但整体效果非常相似。

 // first, black line var kelias = new google.maps.Polyline({ path: result.routes[0].overview_path, strokeColor: "#000000", strokeOpacity: 1.0, strokeWeight: 2 }); // second, translucent red line var kelias2 = new google.maps.Polyline({ path: result.routes[0].overview_path, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 40, map: MAP }); 

更新:您从路径上的点的纬度和经度中添加和减去“z”。 鉴于纬度从+90到-90,但经度从+180到-180,我想你可能需要不同的值。