绘图
除了内置了用于选取feature
的类之外,OpenLayers 3还提供了用户绘图的类ol.interaction.Draw
,支持绘制点,线,多边形,圆等绘制。 我们可以先看一下下面这个可以绘制一条线的例子,用鼠标左键单击地图,地图上就会出现待绘制线的起点,随后移动鼠标,就看到了线,再单击地图,就在这个线上添加了点,依次可以添加多个点,如果要完成线的绘制,在最后一个点处,再点击一下鼠标左键即可。
代码如下:
<div id="map" style="width: 100%"></div>
<script type="text/javascript">
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map',
view: new ol.View({
center: ol.proj.transform(
[104, 30], 'EPSG:4326', 'EPSG:3857'),
zoom: 10
})
});
// 添加绘图的交互类
map.addInteraction(new ol.interaction.Draw({
type: 'LineString' // 设置绘制线
}));
</script>
看起来非常的简单。 但貌似还不可用,因为不知道怎么保存起来,下面我们把绘制完的线保存起来:
比上一个地图写的代码稍微多一点,关键的代码还是在最后:
<div id="map2" style="width: 100%"></div>
<script type="text/javascript">
var map2 = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: 'map2',
view: new ol.View({
center: ol.proj.transform(
[104, 30], 'EPSG:4326', 'EPSG:3857'),
zoom: 10
})
});
// 添加一个绘制的线使用的layer
var lineLayer = new ol.layer.Vector({
source: new ol.source.Vector(),
style: new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'red',
size: 1
})
})
})
map2.addLayer(lineLayer);
map2.addInteraction(new ol.interaction.Draw({
type: 'LineString',
source: lineLayer.getSource() // 注意设置source,这样绘制好的线,就会添加到这个source里
}));
</script>
这样,在地图上绘制一条线的工作基本上算是完成了。 按照这个流程,修改ol.interaction.Draw
的构造参数type
的值为'Point','Polygon',,'MultiPoint','MultiLineString','MultiPolygon' 或者 'Circle'就可以添加点,多边形,多个点,多条线,多个多边形,及圆。 可以自行修改验证。