当前位置: 首页 > 面试题库 >

查找两个纬度/经度点之间距离的最快方法

韩恺
2023-03-14
问题内容

目前,我在mysql数据库中的位置不足一百万,所有位置都包含经度和纬度信息。

我试图通过查询找到一个点和许多其他点之间的距离。它并没有我想要的那么快,尤其是每秒100次以上的命中。

是否有更快的查询,或者可能是比mysql更快的系统?我正在使用此查询:

SELECT 
  name, 
   ( 3959 * acos( cos( radians(42.290763) ) * cos( radians( locations.lat ) ) 
   * cos( radians(locations.lng) - radians(-71.35368)) + sin(radians(42.290763)) 
   * sin( radians(locations.lat)))) AS distance 
FROM locations 
WHERE active = 1 
HAVING distance < 10 
ORDER BY distance;

注意:提供的距离以 英里为单位 。如果您需要 公里 ,请使用6371代替3959


问题答案:
  • 使用表PointGeometry数据类型的值创建点MyISAM。从Mysql 5.7.5开始,表现在InnoDB还支持SPATIAL索引。

  • SPATIAL在这些点上创建索引

  • 使用MBRContains()查找值:

    SELECT  *
    

    FROM table
    WHERE MBRContains(LineFromText(CONCAT(
    ‘(‘
    , @lon + 10 / ( 111.1 / cos(RADIANS(@lon)))
    , ‘ ‘
    , @lat + 10 / 111.1
    , ‘,’
    , @lon - 10 / ( 111.1 / cos(RADIANS(@lat)))
    , ‘ ‘
    , @lat - 10 / 111.1
    , ‘)’ )
    ,mypoint)


MySQL 5.1以上:

    SELECT  *
    FROM    table
    WHERE   MBRContains
                    (
                    LineString
                            (
                            Point (
                                    @lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat + 10 / 111.1
                                  ),
                            Point (
                                    @lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat - 10 / 111.1
                                  ) 
                            ),
                    mypoint
                    )

这将在框中近似选择所有点(@lat +/- 10 km, @lon +/- 10km)

实际上,这不是一个盒子,而是一个球形矩形:球体的经度和纬度绑定段。这可能与 弗朗兹·约瑟夫(Franz Joseph Land)
上的普通矩形不同,但在大多数人居住的地方都非常接近矩形。

  • 应用其他过滤以选择圆内的所有内容(而不是正方形)

  • 可能应用其他精细过滤以解决大圆距离(对于大距离)



 类似资料:
  • 问题内容: 我希望能够估算两个(纬度,经度)点之间的距离。我想下冲,因为这将用于A 图形搜索,并且我希望它能 快速* 。这些点最多相距800公里。 问题答案: Python中Haversine公式的答案(两个GPS点之间的轴承和距离)提供了可以回答您问题的Python实现。 使用下面的实现,我在一台旧笔记本电脑上 不到1秒的 时间内 执行了100,000次迭代 。我认为对于您来说,这应该足够了。但

  • 问题内容: 嗨,我有下表 现在我想获得两点之间的距离。假设一个用户有一个城市3,一个用户有一个城市7。我的情况是一个用户有一个城市和纬度,纬度正在搜索其他用户与城市的距离。例如,拥有城市3的用户正在搜索。他想得到其他城市的用户的距离是7。我已搜索到以下查询 据我所知,此查询查找从一个点到所有其他点的距离。现在我想获得一个点到另一点的距离。 任何指导方针将不胜感激。 问题答案: 我认为您的问题是您具

  • 问题内容: 这是我的尝试,这只是我的代码的一部分: 我正在使用以下公式来获取经度和纬度: 问题答案: 上面Dommer给出的Java代码给出的结果略有不正确,但是如果你正在处理GPS轨迹,则小错误加起来。这是Java中Haversine方法的实现,该方法还考虑了两点之间的高度差。

  • 问题内容: 我在Python 2.7中的Pandas DataFrame中具有以下内容: 我正在寻找计算数据帧中连续行之间的距离。输出应如下所示: 我尝试如下进行调整: 但是,出现以下错误: 此错误已通过MaxU的注释修复。修复后,此计算的输出没有意义-距离近8000 km: 根据: 这个在线计算器:如果我使用Latitude1 = 74.166061,Longitude1 = 30.512811

  • 问题内容: 我有一张表,上面有: 城市纬度经度 而且我需要一个sql查询来知道所有城市都距离纽约100英里。 问题答案: 也许这对您有帮助:http : //www.scribd.com/doc/2569355/Geo-Distance-Search-with- MySQL 这是一个不错的介绍。或只是google for ,您会发现一些教程。 如果有可能并且想让它变得更简单,请直接使用支持距离查询

  • 本文向大家介绍C#通过经纬度计算2个点之间距离的实现代码,包括了C#通过经纬度计算2个点之间距离的实现代码的使用技巧和注意事项,需要的朋友参考一下 根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”。在赤道的南北两边,画出许多和