1. openlayer地图画线+打点
/**
* 注:
* 创建openlayer图层三步骤:
* 1. 创建图层
* 2. 创建图层源
* 3. 创建源特征
* 特别重要的一句话:图层是图层,点是点,点是add到图层上面的。
* 图层什么概念呢?千层饼吃过吧,,,当地图上图层很多的时候回非常卡,所以地图上不要同时加载很多图层,要及时释放空间。
*
*/
import { Vector as SourceVec } from 'ol/source'
import VectorLayer from 'ol/layer/Vector';
import Feature from 'ol/Feature';
import LineString from 'ol/geom/LineString';
import Style from 'ol/style/Style'
import Stroke from 'ol/style/Stroke';
import { asArray } from 'ol/color';
import Point from 'ol/geom/Point';
import Icon from 'ol/style/Icon';
import { toSize } from 'ol/size';
/**
* 创建线
* @param {经纬度数组} lnglats
* @param {参数,有color颜色,width线的粗细} params
*/
export function addLineString(lnglats,params) {
if (!params) {
params = {}
}
if (!params['color']) {
params['color'] = '#3498db'
}
if (!params['width']) {
params['width'] = 8
}
// 设置源特征
let feature = new Feature({
geometry: new LineString(lnglats),
name: 'Line'
})
// 创建图层源
let sourceVec = new SourceVec({
features: [feature]
})
// 创建图层
let vercorLayer = new VectorLayer({
source: sourceVec,
style: new Style({
stroke: new Stroke({
width: params.width,
color: asArray(params.color)
})
})
})
return vercorLayer
}
/**
* 地图打点
* @param {经纬度数组} lnglats
* @param {图标地址} icon
* @param {图标大小} size
*/
export function addMarker(lnglats,icon,size) {
if (!size) {
size = 0.12
}
let features = []
//创建图标特性
lnglats.forEach(lnglat => {
features.push(createFeature(lnglat))
})
// 创建矢量容器
var vectorSource = new SourceVec({
features: features
})
//创建图标样式
var iconStyle = new Style({
image: new Icon({
opacity: 0.75,
src: icon,
scale: toSize(size)
})
})
//创建矢量层
var vectorLayer = new VectorLayer({
source: vectorSource,
style: iconStyle
});
return vectorLayer
}
function createFeature(lnglat) {
return new Feature({
geometry: new Point(lnglat, "XY")
})
}