MySQL 查询附近地点 计算距离

-- 创建表结构 数据没有
CREATE TABLE `geo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `address` varchar(255) DEFAULT NULL COMMENT '地址',
  `lng` double(10,7) DEFAULT NULL COMMENT '经度',
  `lat` double(9,7) DEFAULT NULL COMMENT '纬度',
  PRIMARY KEY (`id`),
  KEY `lng_lat` (`lng`,`lat`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

查询 35.417889,116.703040 济宁创意大厦 2 千米范围内的数据, 并按距离排序

-- 查询 35.417889,116.703040 济宁创意大厦 2 千米范围内的数据, 并按距离排序

SELECT id, address,
(
  6371 * acos(
    cos(radians(35.417889))
    * cos( radians( lat ) )
    * cos(radians( lng ) - radians(116.703040))
    +
    sin( radians(35.417889) )
    * sin( radians( lat ) )
  )
)
AS distance

FROM geo
HAVING distance < 2
ORDER BY distance
LIMIT 0, 20

以上语句并未测试大量数据

 

 

Post Author: admin