Openlayers 3 地图上两点之间的堆叠线(或多线?)

Openlayers 3 地图上两点之间的堆叠线(或多线?),openlayers-3,Openlayers 3,我希望我在正确的地方与我的关心 最近,我对我公司的软件如何发展才能变得更好进行了一些思考,并在一个网站上注意到一个基于地图的软件,它在地图上的各个点之间有一些“堆叠的线条”。我知道在两点之间创建一条直线是可能的,但是对于地图来说,“堆叠的直线”也是一个很好的选择。是否可以使用openlayers在两点之间创建这样一个“多线”示例 这里有两个例子来说明我的意思: 我的问题不是要得到100%的答案!所以我看不出这里的“离题”原因。。。如果有人在之前尝试过类似的东西,或者是否可以使用框架本身从OL

我希望我在正确的地方与我的关心

最近,我对我公司的软件如何发展才能变得更好进行了一些思考,并在一个网站上注意到一个基于地图的软件,它在地图上的各个点之间有一些“堆叠的线条”。我知道在两点之间创建一条直线是可能的,但是对于地图来说,“堆叠的直线”也是一个很好的选择。是否可以使用openlayers在两点之间创建这样一个“多线”示例

这里有两个例子来说明我的意思:


我的问题不是要得到100%的答案!所以我看不出这里的“离题”原因。。。如果有人在之前尝试过类似的东西,或者是否可以使用框架本身从OL3创建这样的线字符串,那么问题就更大了

OpenLayers不支持这种开箱即用的方式,但它提供了自己构建这些“堆叠线”的工具

我试了一下,你可以在这里找到一个演示:

其思想是计算线串的每一段具有固定距离的平行线。我“借用”了数学来计算平行线


这个演示有一个小问题,您可以在第2点和第3点看到。您可以通过计算两个连续线段之间的交点来避免这种情况。

我已经自己解决了,但比第一个答案更复杂:


我的服务器将JSON呈现为响应。在该响应中,包括两点之间应显示哪些线(也包括颜色和重量)。所以我遍历了这个数组中的每个对象。。。单个对象按“权重”降序排列,以便首先将最粗的线添加到数组中,然后将所有其他线添加到数组中。此方法将在“底部”显示最粗的线,在第一条上显示第二条最粗的线,等等。这就是我如何能够在两点之间显示多条线的方法(如示例所示)。

感谢示例,我已经尝试了另一种解决方案,我也将在此处发布。。。但你的例子看起来也不错,这只是一个“自己喜欢的问题”。顺便问一下:是否将重新计算的线串放在地图上,以便它们一起移动到点的中心(例如,如果有图标图像,它们是否都“输入”图像上的点?或者它们是否有左/右偏移)?对不起,我不理解您的问题。你们能重新表述一下吗?你们能用代码提供上面的解释吗?我试过了,但它只对两行字符串有效,换句话说,对于first和lastLinestring以及介于两者之间的lineString样式被lastLinestring覆盖。
  new ol.style.Style({
    geometry: function(feature) {
        var line = feature.getGeometry();
        var coords = [];
        line.forEachSegment(function(from, to) {
            // for each segment calculate a parallel segment with a
            // distance of 4 pixels
            var angle = Math.atan2(to[1] - from[1], to[0] - from[0]);
            var dist = 4 * resolution;
            var newFrom = [
                Math.sin(angle) * dist + from[0],
                -Math.cos(angle) * dist + from[1]
            ];
            var newTo = [
                Math.sin(angle) * dist + to[0],
                -Math.cos(angle) * dist + to[1]
            ];
            coords.push(newFrom);
            coords.push(newTo);
        });

        return new ol.geom.LineString(coords);
    },
    stroke: ...
})