我有数千个传感器在MySQL中的位置数据。我想识别最接近用户位置的传感器,并显示特定传感器的数据。所有的位置数据都以lat液化天然气的形式提供。
据我所知,一种方法是使用Haversine公式求出原点和所有传感器之间的位移,并选择距离最短的传感器。这里的问题是有成千上万的传感器。
有什么建议/线索吗?
发布于 2022-03-04 19:10:11
空间索引允许对任意特定距离内的点进行有效查询。当然,问题是人们可能不知道在特定情况下所需的搜索半径。不幸的是,较大的radius会导致效率低下的查询,而小的radius可能会导致根本不匹配。
一种可能的解决方案是以增大的半径进行搜索,直到搜索返回一些结果,然后找到其中最接近的结果。
本文描述了BigQuery的解决方案,需要对MySQL脚本方言进行一些调整:https://mentin.medium.com/nearest-neighbor-using-bq-scripting-373241f5b2f5
发布于 2022-03-04 19:54:48
发布于 2022-03-05 02:40:26
对于数千人来说,一个包含两个2列索引的简单包围框可能足够快。
要获得更高的速度,请参见SPATIAL索引。
有关这两种解决方案的详细信息,再加上两个更快的解决方案,请参见http://mysql.rjweb.org/doc.php/find_nearest_in_mysql
https://stackoverflow.com/questions/71353271
复制相似问题