openlayers6实现线水流效果(附源码下载)
2023-09-11 14:19:51 时间
内容概览
1.基于openlayers6实现线水流动效果
2.源代码demo下载
效果图如下:
大概实现思路如下:
1.创建矢量图层;
2.设置矢量图层样式,以样式组形式;
3.矢量图层样式组底层保持不变,改变矢量图层的要素feature属性值,动态更新顶层样式的线间隔lineDashOffset属性值,达到线水流动效果。
关键点:矢量图层的样式style内部更新渲染机制,在图层可见范围,地图缩放会自动触发;矢量图层的要素设置属性值变化的话,也会触发。
- 实现代码如下,源码demo下载在文章尾部
import { Map, View } from 'ol';
import TileLayer from 'ol/layer/Tile';
// import XYZ from 'ol/source/XYZ';
import {OSM,TileArcGISRest, Vector as VectorSource} from 'ol/source';
import 'ol/ol.css';
import VectorLayer from 'ol/layer/Vector';
// import VectorSource from 'ol/source/Vector';
import { Style, Fill, Stroke, Text } from 'ol/style';
import GeoJSON from 'ol/format/GeoJSON';
const geojsonObject = {
'type': 'FeatureCollection',
'crs': {
'type': 'name',
'properties': {
'name': 'EPSG:3857',
},
},
'features': [
{
'type': 'Feature',
'geometry': {
'type': 'LineString',
'coordinates': [
[-5e6, -5e6],
[0, -5e6],
],
},
},
],
};
const vectorSource = new VectorSource({
features: new GeoJSON().readFeatures(geojsonObject),
});
const vectorlayer = new VectorLayer({
source: vectorSource,
style: function (feature) {
//控制显隐
let style = null;
style = getStyle(feature, true);
return style;
}
});
const map = new Map({
layers: [
// new TileLayer({
// source: new OSM(),
// }),
new TileLayer({
source: new TileArcGISRest({
url: "https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
}),
}),
vectorlayer,
],
target: 'map',
view: new View({
center: [0, 0],
zoom: 2,
}),
});
function getStyle(feature, isFlow) {
let style;
const geomtype = feature.getGeometry().getType();
if (geomtype == "LineString") {
style = getLineStyle(feature, isFlow);
}
return style;
}
function getLineStyle(feature, isFlow) {
let _font = "12px Arial";
const name = feature.get("name") ? feature.get("name") : "水流效果";
const extend = feature.get("extend");
const direction = extend && extend.direction || 0; // 0代表正方向 -1代表反方向
let styles = [
new Style({
stroke: new Stroke({
color: "rgba(30,144,255, 0.7)",
width: 2,
lineDash: [0]
}),
text: new Text({
text: name,
fill: new Fill({
color: '#FFFF00',
}),
font: _font,
offsetY: 20,
placement: "line"
}),
})
];
if (isFlow) {
//判断是否有水流效果
styles.push(new Style({
stroke: new Stroke({
// color: [204, 204, 255, 1],
color: [255, 250, 250, 1],
width: 2,
lineDash: [20, 27], //一组线段和间距交互的数组,可以控制虚线的长度
……
})
}));
……
}
// console.log('矢量样式渲染');
return styles;
}
相关文章
- 微信小程序 - 引入并使用 Fly.js 请求库(超级详细的教程及运行示例)提供 Fly.js 源码源文件下载,贴心的配置示例及注释,优雅快速的发起 http 网络请求
- 一小时学会使用springboot操作阿里云OSS实现文件上传,下载,删除(附源码)
- leaflet前端JS实现高德地图POI兴趣点批量分类下载(附源码下载)
- leaflet结合Leaflet-Geoman插件实现绘制以及动态配置样式(附源码下载)
- openlayers6绘制扇形(附源码下载)
- leaflet结合geoserver利用WFS服务实现图层删除功能(附源码下载)
- cesium结合geoserver实现地图空间查询(附源码下载)
- cesium 结合 geoserver 实现地图属性查询(附源码下载)
- cesium 实现 3d-tiles 平移旋转贴地(附源码下载)
- leaflet-webpack 入门开发系列六矢量瓦片(附源码下载)
- openlayers4 入门开发系列结合 echarts4 实现统计图(附源码下载)
- leaflet 结合 geoserver 实现地图属性查询(附源码下载)
- leaflet-webpack 入门开发系列五地图卷帘(附源码下载)
- arcgis api 4.x for js 结合 Echarts4 实现统计图(附源码下载)
- leaflet 实现克里金插值功能(附源码下载)
- arcgis api 3.x for js 解决 textSymbol 文本换行显示(附源码下载)
- 秋式开源团队-Web1组-论坛-第一阶段源码发布并提供下载
- 用JavaScript实现网红太空人表盘(绝对详细、绝对原创),附源码下载
- V8源码分析之d8 shell 简介(第四篇)
- 内网服务暴露到外网,实现内网穿透(外网访问内网服务器),自动化配置和部署方案之frp,附实现源码,相关资源放到 GitHub 上免费下载
- 【UE4】如何获取/下载虚幻4(Unreal Engine4)源码