mysql - mysql查询避免GPS问题
问题描述
我每 10 秒从设备记录一次位置,并将其存储到具有以下字段的 mysql 表中:
CREATE TABLE `schedules_trackings` (
`id` bigint(20) NOT NULL,
`device_id` bigint(20) UNSIGNED NOT NULL,
`schedule_id` bigint(20) UNSIGNED NOT NULL,
`latitude` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`longitude` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`altitude` double DEFAULT NULL,
`accuracy` double DEFAULT NULL,
`heading` double DEFAULT NULL,
`speed` double DEFAULT NULL,
`activity` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`battery` double DEFAULT NULL,
`segmentid` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`uuid` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`odometer` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
有时某些设备会丢失 gps 信号或出现 gps 故障,这会在将数据加载到谷歌地图中绘制一些远离道路的直线时导致问题。
我没有在互联网上找到解决方案,但我的想法是……如果我检查下一个坐标和上一个坐标之间的距离,并从结果记录中排除,距离超过 300 米,我认为会解决这个问题。
这是一个很好的解决方案?如何构建如此复杂的查询?
解决方案
根据我的评论,您有纬度和经度。
除了靠近两极的位置,您需要做的就是询问新纬度是否合理地接近旧纬度,以及新经度是否合理地接近旧经度(模数)。您不需要计算点之间距离的开销。
我猜想对于地球上大多数可居住的地方,经度(模数)的正负 0.01 和纬度正负 0.005 的误差范围是可以接受的
推荐阅读
- php - 当我一起运行docker-compose,php7和nginx时下载了php文件
- angular - 扩展组件装饰器角度 7
- php - 为什么我的“最小”和“最大”表单功能不起作用?
- android - 如何在 ContactsContract 查询中使用号码实现搜索联系人。像“display_name LIKE?” 为名
- c - 每次填充 64 个整数时,我都想要确认打印。? 如何检查 i == 64
- mysql - MYSQL - 计算一个人在比赛中获得第二名的次数
- javascript - 如何在 JavaScript 中清晰地呈现来自 JSON 的格式良好的名称键和值?
- c# - 空间理解受限于小区域
- active-directory - 一般来说,对于 Active Directory,大多数公司使用什么作为人员的唯一标识符?
- tensorflow - 如何为 Tensorflow 中的每个通道应用 tf.map_fn