您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

使用表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)

实际上,这不是一个盒子,而是一个球形矩形:球体的经度和纬度绑定段。这可能与 上的普通矩形不同,但在大多数人居住的地方都非常接近矩形。

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

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

其他 2022/1/1 18:14:08 有645人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶