gpt4 book ai didi

javascript - Openlayers 你如何设计与你将要绘制的不同的绘制线串

转载 作者:行者123 更新时间:2023-11-30 14:07:09 24 4
gpt4 key购买 nike

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

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

为了说明我在这里尝试做的事情,截图 -

Expected output

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

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

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

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

最佳答案

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

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; 被声明为在按钮点击函数的范围内

关于javascript - Openlayers 你如何设计与你将要绘制的不同的绘制线串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com