这篇分享我记录到的一个案例,废话不多说,上代码

import Feature from 'ol/Feature'
import LineString from 'ol/geom/LineString'
import VectorSource from 'ol/source/Vector'
import VectorLayer from 'ol/layer/Vector'
import { Style, Circle as CircleStyle, Icon, Stroke, Fill } from 'ol/style'
import Point from 'ol/geom/Point'
import image from '../../assets/track.png'
import jc from '../../assets/map/gj/jc.png' var that = this
var animating = false
let positions = this.coord
if (positions.length <= 0) return
var styles = {
'route': new Style({
stroke: new Stroke({
width: 6,
color: [237, 212, 0, 0.8]
})
}),
'icon': new Style({
image: new Icon({
anchor: [0.5, 1],
src: image
})
}),
/* 'geoMarker': new Style({
image: new CircleStyle({
radius: 7,
fill: new Fill({ color: 'black' }),
stroke: new Stroke({
color: 'white',
width: 2
})
})
}),*/
'geoMarker': new Style({
image: new Icon({
anchor: [0.5, 1],
offset:[0,10],
src: jc
})
})
}
var lineMarker = new Feature({
type: 'route',
geometry: new LineString(positions),
population: 4000,
rainfall: 500
})
var geoMarker = new Feature({
type: 'geoMarker',
geometry: new Point(positions[0]),
population: 4000,
rainfall: 500,
anchor: [0.5, 0.8]
})
var startMarker = new Feature({
type: 'icon',
geometry: new Point(positions[0]),
population: 4000,
rainfall: 500
})
var endMarker = new Feature({
type: 'icon',
geometry: new Point(positions[positions.length - 1]),
population: 4000,
rainfall: 500
})
var source = new VectorSource({
type: 'LineString',
features: [lineMarker, geoMarker, startMarker, endMarker]
})
var lineLayer = new VectorLayer({
source: source,
style: function(feature) {
return styles[feature.get('type')]
}
})
let properties = {}
properties.layerType = map_enum.layer.markerLayers
lineLayer.set('properties', properties)
this.map.getView().setCenter(positions[0])
this.map.getView().setZoom(14)
this.map.addLayer(lineLayer)
var traversed = 0
var speed = 10, startTime, currentPoint, currentCount = 0 function moveFeature(event) {
if (animating) {
var frameState = event.frameState
var elapsedTime = frameState.time - startTime
var traversed = Math.round(speed * elapsedTime / 1000)
if (traversed >= positions.length) {
stopAnimation(true)
return
}
var currentPoint = new Point(positions[traversed])
geoMarker.setGeometry(currentPoint)
}
that.map.render()
} function startAnimation() {
if (animating) {
stopAnimation(false)
} else {
animating = true
startTime = new Date().getTime()
geoMarker.setStyle(null)
that.map.on('postcompose', moveFeature)
that.map.render()
}
} function stopAnimation(ended) {
traversed = 0//走过的路程
speed = 2, startTime, currentPoint, currentCount = 0
animating = false
var coord = ended ? positions[positions.length - 1] : positions[0]
geoMarker.getGeometry().setCoordinates(coord)
that.map.un('postcompose', moveFeature)
} startAnimation()

  

记录:Openlayers6.5 实现轨迹回放的更多相关文章

  1. 物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载)

    物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载)   2015年11月14日|    by: nbboy|    Category: 系统设计, 缓存设计, 高性能系统 摘要 ...

  2. GPS/轨迹追踪、轨迹回放、围栏控制

    折腾一个多月终于弄完了这个项目,起初都未曾接触GPS/轨迹追踪.轨迹回放.圈划围栏...等一些在百度地图或者Googel地图操作的一些业务,后端的业务相对来说简单点 cas单点登录,mongdb灵活的 ...

  3. 使用百度地图API实现轨迹回放

    调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...

  4. Javascript之盒子拖拽(跟随鼠标、边界限定、轨迹回放)

    本文通过拖拽案例,实现"跟随鼠标.边界限定.轨迹回放"三大效果: 完整代码中有详尽注释,故不再进行细致讲解: 对于案例中需要注意的重点或易错点问题,会总结在最后. 效果图(仅演示左 ...

  5. 如何实现LBS轨迹回放功能?含多平台实现代码

    本篇文章告诉您,如何实现轨迹回放.并且提供了web端,iOS端,Android端3个平台的轨迹回放代码.拷贝后可以直接使用.另外,文末有小彩蛋,算是开发者的福利. Web端/JavaScript 实现 ...

  6. Google地图轨迹回放模拟

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. SVG轨迹回放实践

    最近做了埋点方案XTracker的轨迹回放功能,大致效果就是,在指定几个顺序的点之间形成轨迹,来模拟用户在页面上的先后行为(比如一个用户先点了啥,后点了啥).效果图如下: 在这篇文章中,我们来聊聊轨迹 ...

  8. OpenLayers3的轨迹回放

    OpenLayers3实现轨迹回放需要动画操作,官网上的例子用的是postcompose,但是还可以使用javascript中setInterval和setTime. 我的例子是按官网上来的http: ...

  9. 如何使用JS来开发室内三维地图的轨迹回放功能

     在制作完成室内三维地图的功能后,最经常有的需求就是如何做人员的轨迹回放,一般流程都是从数据库中查询轨迹坐标后,经过后台查询接口返回给前端,接下来的事情都交给JS来完成. 如果想做好一个性能好的轨迹回 ...

  10. 使用GMap.NET类库,实现地图轨迹回放。(WPF版)

    前言 实现轨迹回放,GMap.NET有对应的类GMapRoute.这个类函数很少,功能有限,只能实现简单的轨迹回放.要实现更复杂的轨迹回放,就需要自己动手了. 本文介绍一种方法,可以实现复杂的轨迹回放 ...

随机推荐

  1. Go语言的100个错误使用场景(40-47)|字符串&函数&方法

    目录 前言 5. 字符串 5.5 无用的字符串转换(#40) 5.6 获取子字符串操作和内存泄漏(#41) 6. 函数和方法 6.1 不知道选择哪种类型的方法接受者(#42) 6.2 从来不使用命名的 ...

  2. P8670 [蓝桥杯 2018 国 B] 矩阵求和 题解

    题目传送门 前置知识 欧拉函数 解法 欧拉反演,简单地推下式子即可. \(\begin{aligned}\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} \gcd ...

  3. NC24048 [USACO 2017 Jan P]Promotion Counting

    题目链接 题目 题目描述 The cows have once again tried to form a startup company, failing to remember from past ...

  4. Js文件异步加载

    Js文件异步加载 浏览器中渲染引擎与Js脚本引擎是互斥的,在浏览器开始渲染页面时,如果遇到<script>标签,会停止渲染当前页面,也就是说在脚本加载与执行的过程中会阻塞页面的渲染,在网速 ...

  5. Linux下SQLPLUS替代工具rlwrap安装使用

    rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [root@asm RedHat]# ...

  6. Java Base64编码使用介绍

    Base64编码介绍     BASE64 编码是一种常用的字符编码,Base64编码本质上是一种将二进制数据转成文本数据的方案. 但base64不是安全领域下的加密解密算法.能起到安全作用的效果很差 ...

  7. 学习go语言编程之错误处理

    error接口 Golang中有一个关于错误处理的标准模式,即:error接口. type error interface { Error() string } 对于大多数函数,如果要返回错误,大致上 ...

  8. docker自定义bridge网络

    >>> docker network create -d bridge bridge-net # 创建一个名为bridge-net的网络 # 测试,启动两个容器,并且接入到bridg ...

  9. Java新建一个子线程异步运行方法

    如何在运行主方法的同时异步运行另一个方法,我是用来更新缓存: 1. 工具类 public class ThreadPoolUtils { private static final Logger LOG ...

  10. ASP.NET Core 微信支付(二)【 发布到服务器上签名加密时报错:系统找不到指定的文件 APIV3】

    参考资料 .Net微信支付退款操作"系统找不到指定的文件" 错误现象 微信支付(API v3)的统一下单接口和订单查询接口在本地调试成功,可以使用,但是发布到服务器上之后调用接口就 ...