首页 >数据库 >mysql教程 >如何在 MySQL 中使用纬度和经度计算两个位置之间的距离?

如何在 MySQL 中使用纬度和经度计算两个位置之间的距离?

Barbara Streisand
Barbara Streisand原创
2024-12-05 10:49:11321浏览

How Can I Calculate the Distance Between Two Locations Using Latitude and Longitude in MySQL?

在 MySQL 中使用纬度和经度计算点间距离

通常,需要根据两个位置的纬度和经度来确定两个位置之间的距离经度坐标。这是许多场景中的常见任务,例如查找附近的便利设施或计算行驶距离。为了准确计算这个距离,MySQL 提供了一个强大的解决方案。

让我们考虑一个场景,其中我们有一个包含城市名称、纬度和经度值的表:

--------------------------------------------
| id  |  city  |  Latitude  |  Longitude  |
--------------------------------------------
| 1   |   3    |   34.44444 |   84.3434   |
--------------------------------------------
| 2   |   4    | 42.4666667 | 1.4666667   |
--------------------------------------------
| 3   |   5    |  32.534167 | 66.078056   |
--------------------------------------------
| 4   |   6    |  36.948889 | 66.328611   |
--------------------------------------------
| 5   |   7    |  35.088056 | 69.046389   |
--------------------------------------------
| 6   |   8    |  36.083056 |   69.0525   |
--------------------------------------------
| 7   |   9    |  31.015833 | 61.860278   |
--------------------------------------------

假设我们想要计算城市 3 和城市 7 之间的距离。使用提供的 SQL 查询,我们可以检索以公里为单位的距离:

SELECT a.city AS from_city, b.city AS to_city, 
   111.111 *
    DEGREES(ACOS(LEAST(1.0, COS(RADIANS(a.Latitude))
         * COS(RADIANS(b.Latitude))
         * COS(RADIANS(a.Longitude - b.Longitude))
         + SIN(RADIANS(a.Latitude))
         * SIN(RADIANS(b.Latitude))))) AS distance_in_km
  FROM city AS a
  JOIN city AS b ON a.id <> b.id
 WHERE a.city = 3 AND b.city = 7

The查询利用球面余弦定律来计算距离,以公里为单位。

为了提高效率和精度,最佳实践是使用现代方法,如下所示:

  select ST_Distance_Sphere(
    point(-87.6770458, 41.9631174),
    point(-73.9898293, 40.7628267)) 

通过使用合适的 MySQL 函数,我们可以准确确定地球上两点之间的距离,使我们能够满足各种与地理位置相关的需求。

以上是如何在 MySQL 中使用纬度和经度计算两个位置之间的距离?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn