如何用openlayers加载手绘地图可以看另一篇文章:https://www.jianshu.com/p/0b4fd0173b56
一、加载矢量标注及聚合标注
通常需要在地图上标注出一些景点、建筑或者公共设施,可以选择使用矢量标注或者聚合标注。openlayers 添加矢量标注的原理是将标注添加到一个新建的矢量层上,再将矢量层添加到地图上叠加显示;聚合标注的原理同上,但它适用于标注的数据量非常大的场景,随着层级的放大,会展示更多的标注,缩小时,则将标注聚合显示,能够在大量加载标注时提高渲染性能。
1、矢量标注
// 引入的对象和方法
import Vectors from 'ol/layer/Vector.js'
import { WMTS, Vector } from 'ol/source.js'
import Feature from 'ol/Feature'
import OlGeomPoint from 'ol/geom/Point'
import OlStyleStyle from 'ol/style/Style'
import OlStyleIcon from 'ol/style/Icon'
import Text from 'ol/style/Text'
import Fill from 'ol/style/Fill'
/*创建矢量标注
*@param{object} data 标注的数据
*/
createLabel(data) {
// 初始化标签要素
let feature = new Feature({
geometry: new OlGeomPoint(fromLonLat([+data.lng, +data.lat])), // 标签位置
name: data.name, // 标注显示的文字
img: require('./../../assets/imgs/map_icon_location.png'), // 标注显示的logo图片
})
feature.setId(data.id) // 设置ID
feature.setStyle(this.createLabelStyle(feature)) // 设置标注样式
let source = new Vector({}) // 初始化矢量数据源
source.addFeature(feature) // 将标签要素添加至矢量数据源
let layer = new Vectors({ // 创建矢量图层
source: source
})
this.map.addLayer(layer) // 将矢量图层添加至地图
}
/*创建标注样式
*@param{object} feature 标注要素
*@return {object} 返回创建的标注样式对象
*/
createLabelStyle(feature) {
//返回一个样式
return new OlStyleStyle({
//图标样式
image: new OlStyleIcon({
anchor: [10, 18], //设置图标偏移
scale: 0.6, // 图标缩小显示
anchorOrigin: 'top-right', //标注样式的起点位置
anchorXUnits: 'pixels', //X方向单位:分数
anchorYUnits: 'pixels', //Y方向单位:像素
offsetOrigin: 'bottom-left', //偏移起点位置的方向
opacity: 0.9, //透明度
src: feature.get('img') //图片路径
}),
//文本样式
text: new Text({
textAlign: 'center', //对齐方式
textBaseline: 'middle', //文本基线
font: 'normal 12px 微软雅黑', //字体样式
text: feature.get('name'), //文本内容
offsetY: -25, // Y轴偏置
fill: new Fill({ //填充样式
color: '#ffffff'
}),
backgroundFill: new Fill({ // 填充背景
color: asString([0, 0, 0, 0.6]),
}),
padding