记录: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.这个类函数很少,功能有限,只能实现简单的轨迹回放.要实现更复杂的轨迹回放,就需要自己动手了. 本文介绍一种方法,可以实现复杂的轨迹回放 ...
随机推荐
- Hive的基本概念
一.Hive基本概念 1.什么是Hive? hive是基于Hadoop的一个数据仓库工具,用来进行数据提取.转化.加载.可以存储.查询和分析存储在Hadoop中的大规模数据. hive数据仓库工具能将 ...
- .net core微服务之网关
网关: 一:apisix doc:https://apisix.apache.org/zh/docs/apisix/getting-started/README/ github:https://git ...
- NC20960 迪拜的超市
题目链接 题目 题目描述 forever97家住迪拜一环,因此有很多大大小小的商场. 迪拜一环有n个超市,分别在坐标轴[1,n]位置,forever97家在0这个位置. 由于日常开销巨大,所以Trot ...
- NC24158 [USACO 2015 Jan G]Moovie Mooving
题目链接 题目 题目描述 Bessie is out at the movies. Being mischievous as always, she has decided to hide from ...
- 【Unity3D】绘制物体外框线条盒子
1 需求描述 点选物体.框选物体.绘制外边框 中介绍了物体投影到屏幕上的二维外框绘制方法,本文将介绍物体外框线条盒子绘制方法. 内框:选中物体后,绘制物体的内框(紧贴物体.并与物体姿态一致的内框盒 ...
- Java设计模式-适配器模式Adapter
介绍 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本 因接口不匹配不能一起工作的两个类可以协同工作.其别名为包装器(Wrapper ...
- Java并发编程实例--15.在同步代码块中使用条件
并发编程中有个经典问题: 生产消费者问题. 我们有一个数据缓冲区,一个或多个生产者往其中存入对象,另外一个或多个消费者从中取走. 因此,该数据缓冲区是一个共享数据结构,我们需要对其添加读取同步机制,但 ...
- P1536 村村通(并查集)
村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府 "村村通工程" 的目标是使全市任何两个城镇间都可以实现交通(但不一定有直接 ...
- Java常用编程类库
Java语言已经有许多非常成熟的开源基础类库,封装了日常开发中的各种常用操作,如:对象判空,字符串编码,本地缓存等等. 可以直接在项目中引入对应类库使用即可,或者参与完善相应类库的方法. 现将常用的基 ...
- 如何配置WebStorm开发Chrome插件项目
开发Chrome插件项目,在调用Chrome的相关接口时,默认情况下WebStorm是不会有任何提示的,这对于开发者特别是新手特别不友好. 因此,需要IDE能支持Chrome接口调用时的智能提示. 如 ...