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

使用javascript或jquery的几何(卷积)函数,javascript,jquery,google-maps,geometry,Javascript,Jquery,Google Maps,Geometry,我试着在3个月内完成这项工作-我需要按布线方向创建一个多边形,如下所示: 所以我写了这个: directionService.route(request, function(result, status) { if (status == google.maps.DirectionsStatus.OK) { directionsRenderer.setDirections(result); var r = []; var z = 0.5;

我试着在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)
你必须在路径的末端小心,只选择前方或后方的坐标,但你得到了这个想法。最终得到三组坐标轨迹。如果您希望平滑路径,可以将其设置为几个点的平均值

好的,这是有效的代码,但是您必须做一些工作来平滑它,以考虑路径中的抖动。我的建议是将之前的几点取平均值,或者只取几点后的一点


我无法查看图像,但您有什么问题?再多描述一下就好了这是……让我猜猜,你第五次问这个问题()?您是否认为,当您切换帐户或删除问题时,您会得到更好的答案(您最近的问题更详细)?当你看的时候,你应该意识到结果不能作为地图多边形使用,因为交点会被减去。好的,我只是想找到答案,因为我不这么做months@drMolle你的建议是,我怎样才能解决我的问题?我真的需要这样做,请在JSFIDDLE上写一个例子,这是我的例子代码:如何将你们的代码实现到例子中???是的,但再一次,我并没有从方向上得到几乎理想的区域,就像我在我的问题中放的图上一样。。。我需要做什么?问题是一部分解决。。。你的代码没有像我在上面放的图像上那样渲染区域。。。我将在按方向获取区域时解决此问题,如下图所示: