MySQL 8.0 GIS功能 根据坐标圏选一定范围内的相关数据

解决方案

创建表

CREATE TABLE `store` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `item_id` bigint NOT NULL DEFAULT '0',
  `longitude` double(50,6) NOT NULL COMMENT '经度',
  `latitude` double(50,6) NOT NULL COMMENT '纬度',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

插入数据

INSERT INTO `store` (`id`, `name`, `item_id`, `longitude`, `latitude`)
VALUES
    (3, '欧美金融城_星爸爸', 1, 120.011496, 30.287637),
    (4, '永乐城_星爸爸', 1, 120.011802, 30.280433),
    (5, '小镇_一鸣', 2, 120.011209, 30.298552),
    (6, '赛银国际', 2, 120.027181, 30.280808),
    (7, '合景天峻_星爸爸', 1, 120.004597, 30.291660),
    (8, '仓溢东苑_星爸爸', 1, 120.008622, 30.292783);

 GIS相关查询功能

SELECT
	shop.* 
FROM
	(
SELECT
	*,
	round( st_distance_sphere ( point ( 120.012484, 30.298926 ), point ( `longitude`, `latitude` ) ) ) dis 
FROM
	store 
HAVING
	dis < 5000 
ORDER BY
	dis 
	LIMIT 100000 
	) shop 
GROUP BY
	shop.item_id 
ORDER BY
	dis 
	LIMIT 10

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值