MySQL实现按距离范围查找

创建表

DROP TABLE IF EXISTS `pb_area`;

CREATE TABLE `pb_area` (
  `id` int(10) NOT NULL COMMENT 'ID',
  `areaname` varchar(50) NOT NULL COMMENT '栏目名',
  `parentid` int(10) NOT NULL COMMENT '父栏目',
  `shortname` varchar(50) DEFAULT NULL COMMENT '简称',
  `areacode` int(6) DEFAULT NULL COMMENT '区号',
  `zipcode` int(10) DEFAULT NULL COMMENT '邮政编码',
  `pinyin` varchar(100) DEFAULT NULL COMMENT '拼音',
  `lng` varchar(20) DEFAULT NULL COMMENT '经度',
  `lat` varchar(20) DEFAULT NULL COMMENT '纬度',
  `level` tinyint(1) NOT NULL,
  `position` varchar(255) NOT NULL,
  `sort` tinyint(3) unsigned DEFAULT '50' COMMENT '排序',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

地区数据

https://pan.baidu.com/s/1w0VI23FZuHqA9-dYg8BfDw

查询语句

SET @pt2 = ST_GeomFromText('POINT(116.405289 39.904987)');
SELECT *,ST_Distance_Sphere(ST_GeomFromText(CONCAT('POINT(',lng,' ',lat,')')), @pt2) as distance  FROM pb_area
WHERE ST_Distance_Sphere(ST_GeomFromText(CONCAT('POINT(',lng,' ',lat,')')), @pt2) < 10000 ORDER BY distance

POINT(116.405289 39.904987)为北京坐标,ST_Distance_Sphere(pt1,pt2)计算两点之间的距离, 10000是距离米数

官方文档 https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html#function_st-distance-sphere

你可能感兴趣的:(springboot)