如何通过lat,long查找最近的地址

时间:2016-02-03 13:47:07

标签: mysql distance latitude-longitude

我创建了一个位置表,其中保存了lat,long和location。我的要求是当我通过一个纬度很长的时候,将获得离该位置表10英里范围内最近的位置。位置表结构如下: -

CREATE TABLE IF NOT EXISTS `locations` (
  `latitude` float(14,12) unsigned NOT NULL,
  `longitude` float(14,12) unsigned NOT NULL,
  `location` varchar(150) NOT NULL,
  PRIMARY KEY (`latitude`,`longitude`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

和 我的疑问是: -

  SELECT 
    (3959 * ACOS(COS(RADIANS(lat)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS(long)) + SIN(RADIANS(lat)) * SIN(RADIANS(latitude)))) AS distance,
    location
FROM
    locations
HAVING distance < 10
ORDER BY distance
LIMIT 0 , 1

我正在使用MySql 5.6。 位置表中有大约39,000个数据。 执行此查询时,需要5到6秒。

有人可以帮忙我怎样才能减少执行时间?

谢谢!

1 个答案:

答案 0 :(得分:0)

MySQL支持geospatial datatypes and functions - 这些都是通过整数和几何函数优化并且快得多。网上有很多教程 - this one非常好。