MySQL实现按距离范围查找

https://blog.csdn.net/u011164906/article/details/80168211

创建表

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

注:ST_Distance_Sphere 为MySQL 5.7的GIS特性

猜你喜欢

转载自blog.csdn.net/a5816138/article/details/80756629