Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内

问题描述

轨迹数据判断是否经过打卡点,轨迹数据太多,循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线,然后只需要循环打卡点即可,打卡点不多,一般不会超过100个,如果多的话,另说。。一般也就几个,也就是说有多少个打卡点就需要循环多少次,打卡点少,我们就可以使用循环去判断打卡点是否在线的范围内即可

数据结构

轨迹数据,每一条数据都是一个点

在这里插入图片描述

打卡点,一个范围内设置6个打卡点

在这里插入图片描述

直接嵌套循环判断法,弊端很大,非常影响服务器性能,消耗大量内存,而且如果数据量非常庞大的话,执行速度非常的慢

在这里插入图片描述

解决方法

把点拼接成线

  • 在pgsql中写sql语句把所有数据点拼成一条线
SELECT ST_MakeLine(shape ORDER BY gps_time) AS line
FROM card_device_trajectory_info
WHERE imei = '15127666527'

在这里插入图片描述

在这里插入图片描述

  • 在java代码中用循环的方式拼接成一条线

如果你在修改代码的时候发现已有的SQL语句很复杂,那就别动SQL语句了,最好就是直接使用StringBuilder去拼接一条线出来,效果也是一样的,只不过是多了一次循环,但是他不操作数据库,效率应该也差不了多少的!

List<CardDeviceTrajectoryInfo> cardDeviceTrajectoryInfoList = waterJobStatisticsMapper.getTrajectoryByTodayAndImei(new Date(), cardDeviceInfo.getImei());
StringBuilder sb = new StringBuilder("LINESTRING(");
if (!cardDeviceTrajectoryInfoList.isEmpty()){//获取当前地块打卡点List<WaterLandInfoCoordinate> sanitationLandInfoCoordinates = waterLandInfoCoordinateService.list(new LambdaQueryWrapper<WaterLandInfoCoordinate>().eq(WaterLandInfoCoordinate::getDkId,Long.parseLong(cardDeviceInfo.getLandId())));//判断轨迹是否经过打卡点for (CardDeviceTrajectoryInfo cardDeviceTrajectoryInfo : cardDeviceTrajectoryInfoList) {//sb.append(cardDeviceTrajectoryInfo.getLng() + " " + cardDeviceTrajectoryInfo.getLat() + ",");sb.append(cardDeviceTrajectoryInfo.getLng()).append(" ").append(cardDeviceTrajectoryInfo.getLat()).append(",");}//删除最后一个,if (sb.toString().contains(",")){sb.deleteCharAt(sb.lastIndexOf(","));}sbMorning.append(")");System.out.println(sb);if (!sanitationLandInfoCoordinates.isEmpty()){//经过的打卡点除以打卡总数double coordinateTrueRadio = (double) coordinateTotal / sanitationLandInfoCoordinates.size();//根据打卡获取清扫面积areaPerson += coordinateTrueRadio * landInfoServiceOne.getArea();}
}

用线判断打卡点

可以使用ST_Intersects或ST_DWithin函数去判断,ST_Intersects 函数来判断点是否在线上,或使用 ST_DWithin 函数来判断点距离线的距离是否小于等于50米,一般使用ST_DWithin去判断就行,毕竟有个半径可以设置,语法也非常简单,如下

SELECT ST_Intersects(geom, geom) #判断在线上
SELECT ST_DWithin(geom, geom, 50, true) #50米范围内

代码实现过程

把之前所有的点拼成了一条线,然后只需要循环打卡点即可,打卡点不多,一般不会超过100个,如果多的话,另说。。一般也就几个,也就是说有多少个打卡点就需要循环多少次,打卡点少,我们可以使用循环去判断打卡点是否在线的范围内即可

在这里插入图片描述

<select id="getTrajectoryLine" resultType="String">SELECT ST_MakeLine(shape ORDER BY gps_time) AS lineFROM card_device_trajectory_infoWHERE TO_CHAR(gps_time, 'YYYY-MM-DD') = TO_CHAR(DATE(#{today}),'YYYY-MM-DD')AND imei = #{imei}
</select><select id="ifCoordinateLand" resultType="Boolean">select ST_DWithin(st_geomfromtext(st_astext(#{coordinate}),4326),st_geomfromtext(st_astext(#{geom}),4326),#{radius},true)
</select>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313504.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“一个有趣的C语言代码”分析

“一个有趣的C语言代码” 一个有趣的C语言代码-流浪的海豚-ChinaUnix博客 #include <stdio.h> int print() {printf("hello world!\n");return 0; } int main(void) {long base[0];long* result base3;*(result1) *result;*result (long)print;return 0; …

ARM DMIPS算力说明

ARM DMIPS算力说明 ARM算力参考官网地址 https://en.wikipedia.org/wiki/List_of_ARM_processors Product familyARM architectureProcessorFeatureCache (I / D), MMUTypical MIPS MHzReferenceARM1ARMv1ARM1First implementationNoneARM2ARMv2ARM2ARMv2 added the MUL (mu…

无人零售与传统便利店的竞争优势

无人零售与传统便利店的竞争优势 成本控制 • 无人零售 显著降低了人力成本&#xff0c;无需支付店员薪资和相关福利&#xff0c;且通过智能化管理减少能源消耗与维护费用&#xff0c;尤其在高租金和高人流区域效益突出。 • 传统便利店 则承担较高的人员开支&#xff0c;…

Nginx 四层和七层代理区别、配置

四层&#xff1a;通过报文中的目标地址和端口&#xff0c;加上负载均衡设备设置的服务器选择方式&#xff0c;决定最终选择的内部服务器&#xff0c;使用tcp、udp协议。 七层&#xff1a;"内容交换"&#xff0c;通过报文中真正有意义的应用层内容&#xff0c;加上负…

GPT的全面历史和演变:从GPT-1到GPT-4

人工智能新篇章&#xff1a;GPT-4与人类互动的未来&#xff01; 本文探讨了生成式预训练 Transformer (GPT) 的显着演变&#xff0c;提供了从开创性的 GPT-1 到复杂的 GPT-4 的旅程。 每次迭代都标志着重大的技术飞跃&#xff0c;深刻影响人工智能领域以及我们与技术的互动。 我…

MIS微调SAM模型实时交互UI界面

前言 SAM模型的基本介绍可见SAM&#xff08;Segment Anything Model&#xff09;大模型使用--point prompt_sam大模型-CSDN博客 针对Meta团队去年发布的SAM大模型在医学图像分割领域表现性能较差的情况&#xff0c;笔者收集了一些MIS领域的数据集对SAM的架构进行fine tune&am…

akSmart大带宽服务器基础配置科普

在数字化时代&#xff0c;服务器的性能和网络带宽成为业务发展的关键因素。RakSmart作为知名的服务器提供商&#xff0c;其大带宽服务器备受用户青睐。那么&#xff0c;RakSmart大带宽服务器的基础配置究竟有哪些呢?本文将为您揭开这一神秘面纱。 首先&#xff0c;我们来看看R…

信创需求激增,国产服务器操作系统赋能数字化转型

信创&#xff0c;即信息技术应用创新&#xff0c;是指在关键领域和环节推进信息技术的自主创新&#xff0c;构建安全可控的信息技术体系。随着数字化转型的加速&#xff0c;信创需求激增&#xff0c;国产服务器操作系统在其中扮演着至关重要的角色。国产服务器操作系统如何赋能…

爬虫入门——Request请求

目录 前言 一、Requests是什么&#xff1f; 二、使用步骤 1.引入库 2.请求 3.响应 三.总结 前言 上一篇爬虫我们已经提及到了urllib库的使用&#xff0c;为了方便大家的使用过程&#xff0c;这里为大家介绍新的库来实现请求获取响应的库。 一、Requests是什么&#xff1…

发布 Chrome/Edge浏览器extension扩展到应用商店

Chrom Extension发布流程 创建和发布自定义 Chrome 应用和扩展程序&#xff1a;https://support.google.com/chrome/a/answer/2714278?hlzh-Hans 在 Chrome 应用商店中发布&#xff1a;https://developer.chrome.com/docs/webstore/publish?hlzh-cn 注册开发者帐号&#…

Java 实际项目开发之最少必要知识汇总

一、面向过程和面向对象 程序设计语言分为面向过程和面向对象 对于面向过程&#xff0c;强调的是过程&#xff0c;关心的是我去做 对于面向对象&#xff0c;强调的是对象&#xff08;万物皆对象&#xff09;&#xff0c;更关心的是我该让谁去做&#xff0c;这里的谁指的就是对象…

Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第四次作业 (第4章 HBase分布式DB)

1.简述Hbase的特点及与传统关系数据库的区别 HBase与传统关系数据库的区别 &#xff08;1&#xff09;数据类型 关系数据库具有丰富的数据类型&#xff0c;如字符串型、数值型、日期型、二进制型等。HBase只有字符串数据类型&#xff0c;数据的实际类型都是交由用户自己编写程序…

【Linux学习】Linux指令(四)

文章标题 &#x1f680;zip/unzip指令&#xff1a;&#x1f680;tar指令&#xff08;重要&#xff09;&#xff1a;&#x1f680;uname –r指令&#xff1a;&#x1f680;关机指令&#x1f680;几个常用操作 &#x1f680;zip/unzip指令&#xff1a; zip 与 unzip的安装 yum i…

【Git学习笔记(二)】Git的基本操作

Git的基本操作 前言正文1、Git本地仓库创建和一些基本概念1.1 本地仓库创建1.2 本地项目创建1.3 仓库区和工作区1.4 暂存区1.5 提交1.6 查看状态1.7 查看日志 2、Git服务器和远程仓库创建2.1 搭建自己的Git服务器2.2 免费服务器2.2.1 github.com2.2.2 gitee.com2.2.3 创建远程仓…

MySQL基础知识——MySQL事务

事务背景 什么是事务&#xff1f; 一组由一个或多个数据库操作组成的操作组&#xff0c;能够原子的执行&#xff0c;且事务间相互独立&#xff1b; 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 注&#xff1a;MyS…

TCGAplot在线版:输入基因,一键绘制TCGA基因表达与TMB相关性雷达图

1.TCGAplot简介 华科同济医院的王雄老师课题组利用TCGA数据库&#xff0c;开发了一个TCGA多组学数据泛癌分析和可视化R包TCGAplot[1]。用于泛癌表达以及基因表达与 TMB、MSI、TIME 和启动子甲基化之间相关性等分析。 2.TMB简介 肿瘤突变负荷&#xff08;Tumor Mutation Burd…

【LLM】认识LLM

文章目录 1.LLM1.1 LLM简介1.2 LLM发展1.3 市面常见的LLM1.4 LLM涌现的能力 2.RAG2.1 RAG简介2.2 RAG 的工作流程2.3 RAG 和 Finetune 对比2.4 RAG的使用场景分析 3. LangChain3.1 LangChain简介3.2 LangChain的核心组件3.3 LangChain 入门 4.开发 RAG 应用的整体流程5. 环境配…

线上扭蛋机小程序成为年轻人创业选择

随着大众娱乐消费观的提升&#xff0c;带给消费者神秘感和惊喜感的扭蛋机开始走红&#xff0c;成为一个拥有广阔发展空间的行业。在当下二次元文化的火热下&#xff0c;扭蛋机的受众群体也遍布到了各个年龄层&#xff0c;深受大众的喜爱。 然而&#xff0c;玩家对扭蛋机的需求…

陇剑杯 省赛 攻击者1 CTF wireshark 流量分析

陇剑杯 省赛 攻击者1 题目 链接&#xff1a;https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码&#xff1a;haek ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ acce…

伦敦银过夜费之——不能忽略的成本因素

众所周知&#xff0c;伦敦银是收益很好的投资品种&#xff0c;因为它采用了资金杠杆的原理&#xff0c;使投资者可以放大自己本金&#xff0c;而且还可以双向交易&#xff0c;并实现t0的资金回转。但在实际交易的过程中&#xff0c;投资者要充分考虑各种交易费用&#xff0c;对…