创建表
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是距离米数
注:ST_Distance_Sphere 为MySQL 5.7的GIS特性