当前位置: 首页 > news >正文

uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

uniapp结合Canvas+renderjs根据经纬度绘制轨迹

文章目录

    • uniapp结合Canvas+renderjs根据经纬度绘制轨迹
      • 效果图
      • template
      • renderjs
      • js
      • 数据结构


  • 根据官方建议要想在 app-vue 流畅使用 Canvas 动画,需要使用 renderjs 技术,把操作canvas的js逻辑放到视图层运行,避免逻辑层和视图层频繁通信。
  • 这里呢结合 renderjs 技术实现绘制轨迹图形。

你可能需要先了解renderjs如何数据通讯:renderjs 与 app-vue之间数据交互

html中使用canvas根据经纬度绘制轨迹


效果图

在这里插入图片描述


template

  • coordsAll 监听数据变化,只要 coordsAll 数据改变,就是触发 initData 方法。
 <template><view class="map-track-wrap"><!-- xxx --><view class="track-list" :prop="coordsAll" :change:prop="canvas.initData"><!-- xxx --><view class="d-flex canvas-box"><canvas class="canvas" :class="`canvas${index}`"></canvas></view></view></view>
</template>

renderjs

<script module="canvas" lang="renderjs">export default {methods: {initData() {for (let i = 0; i < this.coordsAll.length; i++) {// 绘制图形this.draw(this.coordsAll[i], i);}},draw(locationList, idx) {let canvasHeight = 72,canvasWidth = 72,canvasEle = document.querySelectorAll(`.canvas${idx}>canvas`)[0],ctx = canvasEle.getContext('2d'),amuXArr = [],amuYArr = []for (let i = 0; i < locationList.length; i++) {amuXArr.push(locationList[i].lat);amuYArr.push(locationList[i].lng);}amuYArr = amuYArr.map((item) => {return item * -1;});let xMax = Math.max(...amuXArr);let xMin = Math.min(...amuXArr);let yMax = Math.max(...amuYArr);let yMin = Math.min(...amuYArr);let xScale = canvasWidth / (xMax - xMin);let yScale = canvasHeight / (yMax - yMin);let scale = xScale < yScale ? xScale : yScale;let xoffset = (canvasWidth - (xMax - xMin) * scale) / 2;let yoffset = (canvasHeight - (yMax - yMin) * scale) / 2;ctx.save(); // 保存状态ctx.translate(0, canvasHeight);ctx.rotate(-Math.PI / 2);ctx.beginPath();// 根据偏移量移动点位并画图ctx.moveTo((amuXArr[0] - xMin) * scale + xoffset,(yMax - amuYArr[0]) * scale + yoffset);for (let i = 1; i < amuXArr.length; i++) {ctx.lineTo((amuXArr[i] - xMin) * scale + xoffset,(yMax - amuYArr[i]) * scale + yoffset);}ctx.strokeStyle = '#1FE298';ctx.stroke();ctx.restore(); // 恢复状态}}}
</script>

js

  • renderjs中不支持uni.request,所以请求后台获取数据操作在script中进行,然后监听参数变化,将参数传递过来进行渲染。
searchList() {      	// 处理数据let list = this.dataList;if (list.length > 0) {for(let i = 0; i < list.length; i++) {let tmpLocation = list[i].locations;// 页面监听 coordsAll,把数据传递renderjs,会触发 initData 方法this.coordsAll.push(JSON.parse(tmpLocation));}}
}

数据结构

  • 测试数据,具体根据个人所需处理数据
[{locations: [{"lng": 113.980502,"lat": 22.54161},{"lng": 113.972839,"lat": 22.533976},{"lng": 113.98925,"lat": 22.524669},{"lng": 113.990034,"lat": 22.537097},{"lng": 114.00916,"lat": 22.534477}]},{locations: [{"lng": 113.924271,"lat": 22.537654},{"lng": 113.9367,"lat": 22.532806},{"lng": 113.928494,"lat": 22.518594},{"lng": 113.942673,"lat": 22.524502},{"lng": 113.944302,"lat": 22.538601}]},{locations: [{"lng": 113.98049,"lat": 22.54301},{"lng": 114.06374,"lat": 22.51134},{"lng": 114.06259,"lat": 22.50951},{"lng": 114.06178,"lat": 22.51031},{"lng": 113.96047,"lat": 22.54611}]}
]

相关文章:

uniapp结合Canvas+renderjs根据经纬度绘制轨迹(二)

uniapp结合Canvasrenderjs根据经纬度绘制轨迹 文章目录 uniapp结合Canvasrenderjs根据经纬度绘制轨迹效果图templaterenderjsjs数据结构 ​ 根据官方建议要想在 app-vue 流畅使用 Canvas 动画&#xff0c;需要使用 renderjs 技术&#xff0c;把操作canvas的js逻辑放到视图层运…...

VR全景加盟会遇到哪些问题?全景平台会提供什么?

想创业&#xff0c;你是否也遇到这些问题呢&#xff1f;我是外行怎么办&#xff1f;没有团队怎么办&#xff1f;项目回本周期快吗&#xff1f;项目靠谱吗&#xff1f;加盟平台可信吗&#xff1f;等等这类疑问。近几年&#xff0c;VR产业发展迅速&#xff0c;尤其是VR全景项目在…...

如何进行微服务的集成测试

集成测试的概念 说到集成测试&#xff0c;相信每个测试工程师并不陌生&#xff0c;它不是一个崭新的概念&#xff0c;通过维基百科定义可以知道它在传统软件测试中的含义。 Integration testing (sometimes called integration and testing, abbreviated I&T) is the pha…...

spark grpc 在master运行报错 exitcode13 User did not initialize spark context

程序使用sparksql 以及protobuf grpc &#xff0c;执行报错 ApplicationMaster: Final app status: FAILED, exitCode: 13, (reason: Uncaught exception: java.lang.IllegalStateException: User did not initialize spark context! 先说原因 &#xff1a; 1.使用了不具备权限…...

nginx 反向代理的原理

Nginx&#xff08;发音为"engine X"&#xff09;是一个高性能、轻量级的开源Web服务器和反向代理服务器。它的反向代理功能允许将客户端的请求转发到后端服务器&#xff0c;然后将后端服务器的响应返回给客户端。下面是Nginx反向代理的工作原理&#xff1a; 1.客户端…...

【SpringBoot】第二篇:RocketMq使用

背景&#xff1a; 本文会介绍多种案例&#xff0c;教大家如何使用rocketmq。 一般rocketmq使用在微服务项目中&#xff0c;属于分模块使用。这里使用springboot单体项目来模拟使用。 本文以windows系统来做案例。 下载rocketmq和启动&#xff1a; RocketMQ 在 windows 上运行…...

飞天使-vim简单使用技巧

此文是记录技巧使用&#xff0c;如果想节约时间&#xff0c;可以直接看最后一个章节 vim 的介绍 vim号称编辑器之神&#xff0c;唯快不破&#xff0c;可扩展&#xff0c;各种插件满天飞。 vi 1991 vim 1.14 vim四种模式 普通模式: 移动光标&#xff0c; 删除文本&#xff0c…...

分布式搜索引擎----elasticsearch

目录 1、初识elasticsearch 1.1、什么是elasticsearch 1.2.ELK技术栈 2、正向索引和倒排索引 2.1、正向索引 2.2、倒排索引 2.3、正向索引和倒排索引的区别 3、elasticsearch中的概念理解 3.1、文档和字段 3.2、索引和映射 3.3、mysql与elasticsearch 1、初识elasti…...

AnnotationConfigApplicationContext类和ClasspathXmlApplicationContext类的区别?

在 Spring Framework 中&#xff0c;AnnotationConfigApplicationContext 和 ClasspathXmlApplicationContext 是两个不同的应用程序上下文实现&#xff0c;用于配置和管理 Spring Bean 容器。它们之间的主要区别在于配置的方式和使用场景。 1. **AnnotationConfigApplication…...

使用VSCode SSH实现公网远程连接本地服务器开发的详细教程

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…...

Codeforces Round 894 (Div. 3)

还是打一下卡!!! (A,B,C) 目录 A. Gift Carpet 链接 : 题面 : 题目意思 : 思路 : 代码 : B. Sequence Game 链接 : 题面 : ​编辑 题目意思 : 思路 : 代码 : C. Flower City Fence 原题链接 : 题面 : 题目意思 : 思路 : 代码 : A. Gift Carpet 链…...

ACL2023 Prompt 相关文章速通 Part 1

Accepted Papers link: ACL2023 main conference accepted papers 文章目录 Accepted PapersPrompter: Zero-shot Adaptive Prefixes for Dialogue State Tracking Domain AdaptationQuery Refinement Prompts for Closed-Book Long-Form QAPrompting Language Models for Lin…...

“R语言+遥感“水环境综合评价方法

详情点击链接&#xff1a;"R语言遥感"水环境综合评价方法 一&#xff1a;R语言 1.1 R语言特点&#xff08;R语言&#xff09; 1.2 安装R&#xff08;R语言&#xff09; 1.3 安装RStudio&#xff08;R语言&#xff09; &#xff08;1&#xff09;下载地址 &…...

数据结构之哈希

哈希 1. 哈希概念2. 哈希冲突3. 哈希冲突解决3.1 哈希表的闭散列3.2 哈希表的开散列 2. 哈希的应用2.1 位图2.2 布隆过滤器 哈希&#xff08;Hash&#xff09;是一种将任意长度的二进制明文映射为较短的二进制串的算法。它是一种重要的存储方式&#xff0c;也是一种常见的检索方…...

可视化绘图技巧100篇基础篇(七)-散点图(一)

目录 前言 适用场景 图例 普通散点图与可视化 曲线图 气泡图...

关于什么是框架

框架&#xff08;Framework&#xff09;是一个框子——指其约束性&#xff0c;也是一个架子——指其支撑性。 IT语境中的框架&#xff0c;特指为解决一个开放性问题而设计的具有一定 性的支撑结构。在此结构上约束可以根据具体问题扩展、安插更多的组成部分&#xff0c;从而更迅…...

iOS开发Swift-集合类型

集合基本类型&#xff1a;数组 Array (有序)&#xff0c; 集合 Set (无序不重复)&#xff0c; 字典 Dictionary (无序键值对) 1.数组 Arrays (1)数组的表示 Array<Element> [Element](2)创建空数组 var someInts: [Int] [] someInts.count //数组长度(3)带值数组 var…...

【keepalived双机热备与 lvs(DR)】

目录 一、概述 1.简介 2.原理 3.作用 二、安装 1.配置文件 2.配置项 三、功能模块 1.core 2.vrrp 3.check 四、配置双机热备 1.master 2.backup 五、验证 1.ping验证 2.服务验证 六、双机热备的脑裂现象 七、keepalivedlvs&#xff08;DR&#xff09; 1.作…...

C++笔记之静态成员函数可以在类外部访问私有构造函数吗?

C笔记之静态成员函数可以在类外部访问私有构造函数吗&#xff1f; code review! 静态成员函数可以在类外部访问私有构造函数。在C中&#xff0c;访问控制是在编译时执行的&#xff0c;而不是在运行时执行的。这意味着静态成员函数在编译时是与类本身相关联的&#xff0c;而不…...

最新SQLMap进阶技术

SQLMap进阶&#xff1a;参数讲解 &#xff08;1&#xff09;–level 5&#xff1a;探测等级。 参数“–level 5”指需要执行的测试等级&#xff0c;一共有5个等级&#xff08;1~5级&#xff09;&#xff0c;可不加“level”&#xff0c;默认是1级。可以在xml/payloads.xml中看…...

Umi-OCR:重新定义离线文字识别的全场景解决方案

Umi-OCR&#xff1a;重新定义离线文字识别的全场景解决方案 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_Tre…...

攻防世界 misc题GFSJ1129-【您看我还有机会吗?】

1.工具:010editor、VMware(Ubuntu、binwalk)、在线 Brainfuck解密、CTF-Tools、ImageStrike、7zFM 2.解题: 方法一(最初的解法): 下载附件后,我们打开,发现有一张图片,点击后发现要密码,我发现没有任何密码的提示,怀疑是伪加密(由于篇幅较长,我后续会在写一篇…...

Phi-4-mini-reasoning在ollama中启用flash attention:推理速度提升实测报告

Phi-4-mini-reasoning在ollama中启用flash attention&#xff1a;推理速度提升实测报告 你是否遇到过这样的场景&#xff1a;部署了一个轻量级推理模型&#xff0c;满怀期待地输入问题&#xff0c;结果等待了十几秒才得到回复&#xff1f;对于需要快速响应的应用&#xff0c;比…...

AI写的论文如何降到20%以内?分场景教程+工具对比

AI写的论文如何降到20%以内&#xff1f;分场景教程工具对比 “我用DeepSeek写了大半篇论文&#xff0c;导师要求知网AI率必须低于20%&#xff0c;现在已经是52%&#xff0c;我该怎么办&#xff1f;” 这是毕业季最典型的求助问题之一。 不同的情况&#xff0c;处理方法不一样。…...

告别混乱标注!手把手教你定制LabelImg的标注框颜色与样式(附打包exe完整流程)

视觉标注效率革命&#xff1a;LabelImg高级定制与团队部署实战指南 在计算机视觉项目的标注环节中&#xff0c;混乱的视觉呈现往往成为效率瓶颈。当标注员面对数百张包含"车辆"、"行人"、"交通标志"等多类别的图像时&#xff0c;系统随机分配的标…...

从‘下载失败弹个错’到‘优雅的用户体验’:前端文件下载错误处理与PDF预览的进阶实践

从‘下载失败弹个错’到‘优雅的用户体验’&#xff1a;前端文件下载错误处理与PDF预览的进阶实践 在当今的Web应用中&#xff0c;文件下载功能几乎是每个系统的标配。然而&#xff0c;很多开发者往往只关注功能的实现&#xff0c;而忽略了异常处理和用户体验的细节。当用户点…...

【Java 25向量API工业落地白皮书】:20年JVM专家亲授4大高并发场景实战代码(含SIMD加速性能实测数据)

第一章&#xff1a;Java 25向量API工业落地全景概览Java 25正式将Vector API&#xff08;JEP 478&#xff09;升级为标准特性&#xff0c;标志着JVM在高性能数值计算领域迈入新阶段。该API通过泛型向量类型&#xff08;如Vector<Double>&#xff09;、跨平台掩码操作与自…...

PMSM无感FOC实战:手把手调参你的滑模观测器SMO(从Simulink到MCU)

PMSM无感FOC实战&#xff1a;滑模观测器SMO从理论到调参全解析 引言&#xff1a;为什么SMO是无感FOC的核心观测器&#xff1f; 在永磁同步电机&#xff08;PMSM&#xff09;的无传感器矢量控制&#xff08;FOC&#xff09;系统中&#xff0c;滑模观测器&#xff08;Sliding Mod…...

全志T3核心板DDR初始化失败:从ZQ校准误导到VREF电压偏差的排查实录

1. 问题现象与初步排查 那天早上刚到实验室&#xff0c;测试组的同事就急匆匆跑过来&#xff1a;"哥&#xff0c;又有三台设备启动不了&#xff0c;uboot都没跑起来&#xff01;"我接过设备一看&#xff0c;果然又是熟悉的ZQ校准错误提示&#xff0c;这已经是本周第五…...

Inner-IoU: More Effective Intersection over Union Loss with Auxiliary Bounding Box——基于辅助边界框的更有效交并比损失

这篇题为《Inner-IoU: More Effective Intersection over Union Loss with Auxiliary Bounding Box》的论文&#xff0c;主要研究了目标检测中边界框回归&#xff08;BBR&#xff09;损失函数的改进问题。以下是其核心研究内容的全面总结概括&#xff1a; 1. 研究背景与问题 现…...