首页 > 解决方案 > 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 米,我认为会解决这个问题。

这是一个很好的解决方案?如何构建如此复杂的查询?

标签: mysqlgps

解决方案


根据我的评论,您有纬度和经度。

除了靠近两极的位置,您需要做的就是询问新纬度是否合理地接近旧纬度,以及新经度是否合理地接近旧经度(模数)。您不需要计算点之间距离的开销。

我猜想对于地球上大多数可居住的地方,经度(模数)的正负 0.01 和纬度正负 0.005 的误差范围是可以接受的


推荐阅读