gpt4 book ai didi

mysql - 在 mySQL 中测量半径内位置的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 06:33:22 24 4
gpt4 key购买 nike

我正在编写一个应用程序,它需要允许用户选择其位置半径范围内的元素。没有办法知道最终会有多少个地点,但可能有数万个。进行搜索的用户是位置节点之一(而不仅仅是他们的手机或其他东西提交的任意位置)

我看到这样的答案:mysql lat lon calulation to show locations within radius但我担心这是一项非常严肃的工作,因为需要为每个“其他”位置计算所涉及的数学。

我正在考虑的另一种方法是有一个关系表来标识每个位置之间的距离(每次添加位置时我都会填充),当然它会有大量的行来定义每个可能的关系,但是然后选择 *that table 将非常快,特别是如果距离被索引。

很想从在 mySQL 中做过这件事的人那里得到一些建议,并且可以警告/建议我支持或反对最好的方法。

最佳答案

以下 SQL 查询使用 Spherical Law of Cosines计算坐标与表中坐标之间的距离。它将结果限制为 10,并按距离排序。这用于代替 Haversine 公式,后者太复杂而无法使用 MySQL 执行

余弦球面定律

其中 R = 3,959 英里或 6,371 公里

d = acos( sin(lat1).sin(lat2) + cos(lat1).cos(lat2).cos(lng2-lng1) ).R

SQL

SELECT  name, lat, lng, ( 3959 * acos( cos( radians($center_lat) ) 
* cos( radians( lat ) ) * cos( radians( lng )
- radians($center_lng) ) + sin( radians($center_lat) )
* sin( radians( lat ) ) ) ) AS distance FROM table
ORDER BY distance LIMIT 0 , 10

其中 $center_lat$center_lng 是位置坐标。

查询使用SQL Math functions

在具有 50,068 行的数据库上查询花费了 0.2506 秒

MySQL 中可用的空间函数不适合您的用途,请参阅 Blog

关于mysql - 在 mySQL 中测量半径内位置的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com