使用MySQL的空间函数和索引来实现根据经纬度查询5公里范围内门店列表的功能

使用MySQL的空间函数和索引来实现根据经纬度查询5公里范围内门店列表的功能

资源介绍


可以使用MySQL的空间函数和索引来实现根据经纬度查询5公里范围内门店列表的功能。具体步骤如下:

  1. 创建门店表格,包括门店名称、地址、经度、纬度等信息。门店经度和纬度需要设置为DECIMAL(10,6)类型。

CREATE TABLE `stores` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '门店名称',
  `address` varchar(255) DEFAULT NULL COMMENT '门店地址',
  `lng` decimal(10,6) DEFAULT NULL COMMENT '经度',
  `lat` decimal(10,6) DEFAULT NULL COMMENT '纬度',  PRIMARY KEY (`id`),
  SPATIAL INDEX `idx_location` (`lng`,`lat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='门店表';
  1. 插入门店数据,例如:

INSERT INTO `stores` (`name`, `address`, `lng`, `lat`) VALUES('门店A', '广州市天河区XX路XX号', 113.332429, 23.135308),
('门店B', '广州市海珠区XX路XX号', 113.278910, 23.092502),
('门店C', '广州市番禺区XX路XX号', 113.384045, 22.944302),
...
  1. 构造查询语句,使用MySQL的空间函数ST_Distance_Sphere()计算两个经纬度之间的距离,并结合ST_Within()函数判断门店是否在5公里范围内。以下是一个例子:

SELECT name, address, lng, lat, ST_Distance_Sphere(point(lng, lat), point(113.322921, 23.096533)) AS distanceFROM storesWHERE ST_Distance_Sphere(point(lng, lat), point(113.322921, 23.096533)) <= 5000;

其中point(lng, lat)表示将门店经度和纬度组成一个点,(113.322921, 23.096533)表示目标经纬度,ST_Distance_Sphere()返回两个点之间的距离,单位为米。如果距离小于等于5000,则表示该门店在5公里范围内。

注意:在进行上述查询之前,请确保已经启用了MySQL的空间扩展,即spatial_ref_sys表存在,并且MySQL服务器配置文件中启用了相应的插件和选项。


立即下载

点赞(0)

手机端

微信扫一扫体验

返回
顶部