MySQL 实战(一):实现“附近的人”功能 | 您所在的位置:网站首页 › 推特如何使用附近人功能呢视频教学 › MySQL 实战(一):实现“附近的人”功能 |
❤️ 个人主页:水滴技术 🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬 🌸 订阅专栏:MySQL 教程:从入门到精通 文章目录 ST_Distance_Sphere 函数示例一:计算北京站到北京西站的距离示例二:查询“附近的人” Haversine 公式示例一:计算北京站到北京西站的距离示例二:查询“附近的人” 总结热门专栏大家好,我是水滴~~ 对于“附近的人”功能,在生活中是比较常用的,像外卖app附近的美食,共享单车app里附近的车辆等等。我们之前使用 ElasticSearch 实现过该功能,本篇文章我们介绍如何通过 MySQL 来实现“附近的人”功能。 ST_Distance_Sphere 函数在 MySQL 中,ST_Distance_Sphere 函数是一个地理空间函数,用于计算两个地理位置之间的球面距离。它基于球体模型进行计算,并返回两个点之间的距离结果。 ST_Distance_Sphere 函数的语法如下: ST_Distance_Sphere(point1, point2)其中,point1 和 point2 是表示地理位置的 POINT 类型的参数。 示例一:计算北京站到北京西站的距离以下是一个使用 ST_Distance_Sphere 函数计算球面距离的示例: -- 北京站 116.427322,39.902822 北京西站 116.322083,39.8949 SELECT ST_Distance_Sphere( POINT(116.427322,39.902822), POINT(116.322083,39.8949) ) AS distance;在上述示例中,我们使用 POINT 类型的参数表示两个地理位置点,分别是北京站(经度 116.427322,纬度 39.902822)和北京西站(经度 116.322083,纬度 39.8949)。然后,我们调用 ST_Distance_Sphere 函数来计算这两个点之间的球面距离,并将结果命名为 distance。 返回结果: distance ----------------------- 9020.641566063772ST_Distance_Sphere 函数的返回值是以米为单位的球面距离,可以根据需要将结果转换为千米。上面示例中可以看出,北京站到北京西站的距离约为9公里。 需要注意的是,使用 ST_Distance_Sphere 函数进行球面距离计算需要 MySQL 版本 8.0.17 或更高版本,并且需要在数据库中启用地理空间功能。 示例二:查询“附近的人”要实现"附近的人"功能,可以使用MySQL的ST_Distance_Sphere 函数和索引来处理地理位置数据。下面是一个基本的实现步骤: (1)创建GEO测试表:其中包括id 主键、location地理位置信息。地理位置信息可以使用POINT类型来表示。 CREATE TABLE `test_geo` ( `id` bigint NOT NULL AUTO_INCREMENT, `location` point DEFAULT NULL, PRIMARY KEY (`id`) );(2)添加地理位置数据:向表中插入地理位置数据。 INSERT INTO `test_geo`(`id`, `location`) VALUES (1, POINT(116.39775,39.92029)), (2, POINT(116.395947,39.916208), (3, POINT(116.410624,39.91871)), (4, POINT(116.397235,39.909823)), (5, POINT(116.385304,39.917591)), (6, POINT(116.396548,39.92832)) ;(3)创建地理索引:为该表的地理位置字段创建索引,以便进行空间查询。 CREATE SPATIAL INDEX idx_location ON test_geo (location);(4)查询附近的人:使用地理空间函数进行附近的人查询。 SELECT *, ST_Distance_Sphere ( POINT ( 116.410539, 39.912983 ), location ) AS distance -- 返回距离,单位M FROM test_geo WHERE ST_Distance_Sphere ( POINT ( 116.410539, 39.912983 ), location ) |
CopyRight 2018-2019 实验室设备网 版权所有 |