为了账号安全,请及时绑定邮箱和手机立即绑定

寻找两个拉长点之间距离的最快方法

寻找两个拉长点之间距离的最快方法

心有法竹 2019-06-04 15:39:25
寻找两个拉长点之间距离的最快方法我目前在MySQL数据库中有将近100万个位置,所有位置都有经度和纬度信息。我试图通过查询找到一个点和许多其他点之间的距离。它没有我想要的那么快,尤其是每秒有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.
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

  • 使用Point值.的值Geometry中的数据类型MyISAM桌子。截至MySQL 5.7.5,InnoDB表现在也支持SPATIAL指数。

  • 创建一个SPATIAL这些点的索引

  • 使用MBRContains()若要查找值,请执行以下操作:

    SELECT  *FROM    tableWHERE   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).

这实际上不是一个盒子,而是一个球形矩形:球面的纬度和经度界段。这可能与弗兰兹·约瑟夫·兰德但在大多数有人居住的地方都离它很近。

  • 应用额外的过滤来选择圆圈内的所有东西(而不是正方形)

  • 可能对大圆距离(大距离)应用额外的精细过滤。


查看完整回答
反对 回复 2019-06-04
?
慕少森

TA贡献2019条经验 获得超9个赞

请查看这个演示文稿,以获得一个好的答案。基本上,它显示了注释中显示的两种不同的方法,并详细解释了为什么/什么时候应该使用其中一种,以及为什么“框中”的计算会非常有趣。

用MySQL进行地理距离搜索


查看完整回答
反对 回复 2019-06-04
  • 3 回答
  • 0 关注
  • 502 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信