可以使用MySQL的空间函数和索引来实现根据经纬度查询5公里范围内门店列表的功能。具体步骤如下:
创建门店表格,包括门店名称、地址、经度、纬度等信息。门店经度和纬度需要设置为
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='门店表';
插入门店数据,例如:
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), ...
构造查询语句,使用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服务器配置文件中启用了相应的插件和选项。
评论