openlayer clear()后再用draw绘制获取不到feature
时间: 2023-12-14 16:02:52 浏览: 130
在 OpenLayers 中,`clear()` 方法会清除图层上的所有要素,包括选中的要素。如果你在调用 `clear()` 方法后立即调用 `draw` 方法,则可能会发现无法获取要素。这是因为 `clear()` 方法本质上是将图层的 `features` 属性设置为空数组,而 `draw` 方法需要依赖这个属性。
为了解决这个问题,你可以在调用 `draw` 方法之前,重新添加要素到图层中。例如,你可以将之前的要素保存在一个变量中,在调用 `clear()` 方法后重新添加这些要素。代码示例:
```
//保存之前的要素
var previousFeatures = layer.getSource().getFeatures();
//清除图层
layer.getSource().clear();
//重新添加之前保存的要素
layer.getSource().addFeatures(previousFeatures);
//调用draw方法
//...
```
这样,你就可以在清除图层后重新获取之前的要素了。
相关问题
openlayer绘制面
要使用OpenLayers绘制面,您可以按照以下步骤操作:
1. 首先,确保您已经在项目中引入了OpenLayers库。您可以从OpenLayers官方网站下载并引入它。
2. 创建一个地图容器,可以是一个div元素,用于显示地图。
3. 初始化一个地图对象,并将其添加到地图容器中。
4. 创建一个矢量图层,用于绘制面。
5. 创建一个绘制交互工具,例如ol.interaction.Draw,指定绘制的几何类型为面geometryType: 'Polygon'。
6. 将绘制交互工具添加到地图中。
7. 在绘制完成后,通过监听drawend事件获取绘制的几何对象。
8. 将绘制的几何对象添加到矢量图层中,并更新地图显示。
下面是一个简单的示例代码:
```javascript
// 创建地图容器
var mapContainer = document.getElementById('map');
// 初始化地图对象
var map = new ol.Map({
target: mapContainer,
layers: [
// 添加一个矢量图层
new ol.layer.Vector({
source: new ol.source.Vector()
})
],
view: new ol.View({
center: [0, 0],
zoom: 2
})
});
// 创建绘制交互工具
var draw = new ol.interaction.Draw({
source: map.getLayers().item(0).getSource(),
type: 'Polygon'
});
// 添加绘制交互工具到地图
map.addInteraction(draw);
// 监听绘制完成事件
draw.on('drawend', function(event) {
var feature = event.feature;
// 添加绘制的几何对象到矢量图层
map.getLayers().item(0).getSource().addFeature(feature);
// 更新地图显示
map.getView().fit(map.getLayers().item(0).getSource().getExtent());
});
```
这样,您就可以在OpenLayers中绘制面了。
openlayer接口绘制矩形
OpenLayers 提供了 Draw 接口来绘制矩形,以下是一个简单的示例:
```javascript
// 创建一个绘图层
var drawLayer = new ol.layer.Vector({
source: new ol.source.Vector(),
style: new ol.style.Style({
fill: new ol.style.Fill({
color: 'rgba(255, 255, 255, 0.2)'
}),
stroke: new ol.style.Stroke({
color: '#ffcc33',
width: 2
}),
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({
color: '#ffcc33'
})
})
})
});
// 添加绘图层到地图中
map.addLayer(drawLayer);
// 创建一个绘图工具
var draw = new ol.interaction.Draw({
source: drawLayer.getSource(),
type: 'Circle' // 指定绘制类型为矩形
});
// 监听绘图完成事件
draw.on('drawend', function(event) {
// 获取绘制的矩形
var rectangle = event.feature.getGeometry();
});
// 添加绘图工具到地图中
map.addInteraction(draw);
```
上述代码中,我们首先创建一个绘图层 `drawLayer`,并将其添加到地图中。然后创建一个绘图工具 `draw`,指定绘制类型为矩形。接着监听绘图完成事件 `drawend`,在事件处理函数中获取绘制的矩形。最后将绘图工具添加到地图中,就可以开始绘制矩形了。
阅读全文