MySQL 实战(一):实现“附近的人”功能 您所在的位置:网站首页 推特如何使用附近人功能呢视频教学 MySQL 实战(一):实现“附近的人”功能

MySQL 实战(一):实现“附近的人”功能

2024-06-02 10:05| 来源: 网络整理| 查看: 265

❤️ 个人主页:水滴技术 🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬 🌸 订阅专栏: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.641566063772

ST_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 实验室设备网 版权所有