记录:Openlayers6.5 实现轨迹回放
这篇分享我记录到的一个案例,废话不多说,上代码
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 实现轨迹回放的更多相关文章
- 物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载)
物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载) 2015年11月14日| by: nbboy| Category: 系统设计, 缓存设计, 高性能系统 摘要 ...
- GPS/轨迹追踪、轨迹回放、围栏控制
折腾一个多月终于弄完了这个项目,起初都未曾接触GPS/轨迹追踪.轨迹回放.圈划围栏...等一些在百度地图或者Googel地图操作的一些业务,后端的业务相对来说简单点 cas单点登录,mongdb灵活的 ...
- 使用百度地图API实现轨迹回放
调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...
- Javascript之盒子拖拽(跟随鼠标、边界限定、轨迹回放)
本文通过拖拽案例,实现"跟随鼠标.边界限定.轨迹回放"三大效果: 完整代码中有详尽注释,故不再进行细致讲解: 对于案例中需要注意的重点或易错点问题,会总结在最后. 效果图(仅演示左 ...
- 如何实现LBS轨迹回放功能?含多平台实现代码
本篇文章告诉您,如何实现轨迹回放.并且提供了web端,iOS端,Android端3个平台的轨迹回放代码.拷贝后可以直接使用.另外,文末有小彩蛋,算是开发者的福利. Web端/JavaScript 实现 ...
- Google地图轨迹回放模拟
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- SVG轨迹回放实践
最近做了埋点方案XTracker的轨迹回放功能,大致效果就是,在指定几个顺序的点之间形成轨迹,来模拟用户在页面上的先后行为(比如一个用户先点了啥,后点了啥).效果图如下: 在这篇文章中,我们来聊聊轨迹 ...
- OpenLayers3的轨迹回放
OpenLayers3实现轨迹回放需要动画操作,官网上的例子用的是postcompose,但是还可以使用javascript中setInterval和setTime. 我的例子是按官网上来的http: ...
- 如何使用JS来开发室内三维地图的轨迹回放功能
在制作完成室内三维地图的功能后,最经常有的需求就是如何做人员的轨迹回放,一般流程都是从数据库中查询轨迹坐标后,经过后台查询接口返回给前端,接下来的事情都交给JS来完成. 如果想做好一个性能好的轨迹回 ...
- 使用GMap.NET类库,实现地图轨迹回放。(WPF版)
前言 实现轨迹回放,GMap.NET有对应的类GMapRoute.这个类函数很少,功能有限,只能实现简单的轨迹回放.要实现更复杂的轨迹回放,就需要自己动手了. 本文介绍一种方法,可以实现复杂的轨迹回放 ...
随机推荐
- POJ1080 滑雪
题目链接 题目 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Mi ...
- Javascript中的var变量声明作用域问题
先看一下这两段代码的执行结果 var name2 = 'What!'; function a() { if (typeof name2 === 'undefined') { console.log(' ...
- Oracle高级队列介绍
原始链接:http://www.oracle-developer.net/display.php?id=411 oracle高级队列介绍 高级队列Advanced Queuing(AQ)在oracle ...
- spring boot+sqlite+mybatis实现增删改查例子
主要是更换了下sqlite的数据源而已,其他代码不变. 我都贴一下吧,这个算是比较通用的基础增删改查代码. 1.创建test.db 可以使用Idea自带的Database插件配置,也可以命令行创建,具 ...
- AIGC程序员效能提升之道
得益于IT产业近几年的繁荣,老杨所在公司的业务也出奇的兴隆,每天干不完的工作背后,也意味着健康的消耗和体重的不断增加. 曾记否,刚毕业的老杨体重刚刚堪堪破百,同事们经常调侃他说是一阵风就能吹走,经过了 ...
- 从 vs 的 rc 文件中获取版本号
更新项目版本号时,需要与 rc 文件的 version 同步,比较方便的方法是直接从 rc 文件中获取版本号,并应用到程序中 // 删除日志检查 bool GetVersion() { // get ...
- C++中两种获取UUID的方法(编程)
第一种,依托WMI #define _WIN32_DCOM #include <iostream> using namespace std; #include <comdef.h&g ...
- virtualapp启动流程源码分析
virtualapp启动流程分析 1. 首先是启动本身,执行Vpp 的attachBaseContext @Override protected void attachBaseContext(Cont ...
- Xposed 原理
Xposed 使用替换app_process的方式(这是个二进制文件) xposed 的 app_main2.cpp中做了xposed的初始化 /** Initialize Xposed (unles ...
- 内存管理机制 & 垃圾回收机制
内存管理机制 python是由c开发出来的. 看源码分析,下载python安装包tar包 解压后主要看Include和Objects这两个文件夹 # 分析 在创建对象时,如 v = 0.3 源码内部: ...