【问题标题】:Openlayers how do you style drawn linestring different than what you are about to drawOpenlayers你如何绘制与你要绘制的不同的线串样式
【发布时间】:2019-03-14 06:20:49
【问题描述】:

我有一个具有绘图交互的 openlayers 地图。当用户开始在地图上绘制线串时,绘制的线串部分应该与用户接下来要绘制的部分不同。

简而言之,当用户在地图上放置一个点时,直到该点的线应该是块状的,没有破折号或任何其他样式选项。

为了说明我在这里尝试做的是截图 -

我们可以看到用户即将在线上添加另一个点,所以直到该点的线应该变成蓝色块。

我维护了添加到地图的点集合,当用户选择删除最后一个点时,它会从地图中删除,但最后一段也应该从地图中消失。找不到任何东西来实现这一目标。

我还添加了ol.style.RegularShape() 来显示一个正方形,但它显示的是一个圆圈,而不知道我做错了什么。

这是我的代码的 jsbin 链接 - Draw interaction line style problem

【问题讨论】:

    标签: javascript openlayers openlayers-3 openlayers-5


    【解决方案1】:

    您需要为您的绘图样式使用样式函数,并将几何图形分成两部分进行样式设置:

    var drawStyle = function(feature) {
        var styles = [];
        if (feature.getGeometry().getType() == 'LineString') {
            var coordinates = feature.getGeometry().getCoordinates();
            styles.push(new ol.style.Style({
                geometry: new ol.geom.LineString(coordinates.slice(-2)),
                stroke: new ol.style.Stroke({
                    color: '#0000FF',
                    lineDash: [1, 20],
                    width: 5,
                  lineCap:'square',
                  lineJoin:'round',
                  lineDashOffset:10
                })
            })); 
            styles.push(new ol.style.Style({
                geometry: new ol.geom.MultiPoint(coordinates),
                image: new ol.style.RegularShape({
                  points: 4,
                  radius: 6,
                  angle: Math.PI / 4,
                  fill: new ol.style.Fill({
                    color: 'blue'
                  }),
                  stroke: new ol.style.Stroke({
                    color: 'blue'
                  }),
                })
            })); 
            if (coordinates.length > 2) {
              styles.push(new ol.style.Style({
                geometry: new ol.geom.LineString(coordinates.slice(0,-1)),
                stroke: new ol.style.Stroke({
                    color: '#0000FF',
                    width: 2,
                  lineCap:'square',
                  lineJoin:'round'
                })
              }));
            }
        }
        return styles;
    }
    

    要从线交互中删除最后一个点,只需使用

    line.removeLastPoint();
    

    确保声明var line;,使其在按钮单击功能的范围内

    【讨论】:

    • 将在我完成 POC 后检查您的解决方案。如何在绘制线的每个点上获得正方形 RegularShape 样式?我添加了drawPointPoint 类型的交互只是为了做那些不起作用的事情,它正在显示圆圈。这里 [jsbin.com/nimopez/edit?js,output]
    • 您可以在样式函数中将线串的顶点设置为多点几何图形,这样就不需要单独的点交互了。
    • 谢谢它的工作。向你学习 openlayers 中的很多东西。
    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2021-05-28
    相关资源
    最近更新 更多