规则几何体图标
相对于png而言,svg这样的矢量图在放大缩小方面更清晰,但对于规则几何体而言,如果也使用svg,未免复杂了一点,OpenLayers 3为了简化这样的操作,提供了一个规则几何体的样式类ol.style.RegularShape
,使用它可以轻松绘制正方形,三角形等,也支持星形规则几何图形,比如下面这样:
图上有一个三角形,一个5星,代码如下:
<div id="map" style="width: 100%"></div>
<script type="text/javascript">
var layer = new ol.layer.Vector({
source: new ol.source.Vector()
})
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
layer
],
target: 'map',
view: new ol.View({
projection: 'EPSG:4326',
center: [104, 30],
zoom: 10
})
});
// 添加一个三角形
var shape = new ol.Feature({
geometry: new ol.geom.Point([104, 30])
});
shape.setStyle(new ol.style.Style({
image: new ol.style.RegularShape({
points: 3, // 顶点数
radius: 10, // 图形大小,单位为像素
stroke: new ol.style.Stroke({ // 设置边的样式
color: 'red',
size: 2
})
})
}));
layer.getSource().addFeature(shape);
// 添加一个五星
var star = new ol.Feature({
geometry: new ol.geom.Point([104.1, 30.1])
});
star.setStyle(new ol.style.Style({
image: new ol.style.RegularShape({
points: 5, // 顶点个数
radius1: 20, // 外圈大小
radius2: 10, // 内圈大小
stroke: new ol.style.Stroke({ // 设置边的样式
color: 'red',
size: 2
}),
fill: new ol.style.Fill({ // 设置五星填充样式
color: 'blue'
})
})
}));
layer.getSource().addFeature(star);
</script>
除了基本的设置之外,还支持图形旋转,以及跟随地图旋转而旋转,这些设置在其他的应用中也多有涉及,此处不再用实例来介绍,可自行验证。