mysql 搜寻附近N公里内数据的简单实例
根据圆周率和地球半径系数以及搜寻点的经纬度,搜寻数据表中与搜寻点之间的距离为N公里内的数据。
1、创建测试表
CREATETABLE`location`( `id`int(10)unsignedNOTNULLAUTO_INCREMENT, `name`varchar(50)NOTNULL, `longitude`decimal(13,10)NOTNULL, `latitude`decimal(13,10)NOTNULL, PRIMARYKEY(`id`), KEY`long_lat_index`(`longitude`,`latitude`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
2、插入测试数据
insertintolocation(name,longitude,latitude)values ('广州东站',113.332264,23.156206), ('林和西',113.330611,23.147234), ('天平架',113.328095,23.165376); mysql>select*from`location`; +----+--------------+----------------+---------------+ |id|name|longitude|latitude| +----+--------------+----------------+---------------+ |1|广州东站|113.3322640000|23.1562060000| |2|林和西|113.3306110000|23.1472340000| |3|天平架|113.3280950000|23.1653760000| +----+--------------+----------------+---------------+
3、搜寻1公里内的数据
搜寻点坐标:时代广场
计算球面两点坐标距离公式
C=sin(MLatA)sin(MLatB)cos(MLonA-MLonB)+cos(MLatA)cos(MLatB) Distance=RArccos(C)*Pi180
根据计算公式得到查询语句如下:
select*from`location`where( acos( sin(([#latitude#]*3.1415)/180)*sin((latitude*3.1415)/180)+ cos(([#latitude#]*3.1415)/180)*cos((latitude*3.1415)/180)*cos(([#longitude#]*3.1415)/180-(longitude*3.1415)/180) )*6370.996 )<=1;
执行查询:
mysql>select*from`location`where( ->acos( ->sin((23.146436*3.1415)/180)*sin((latitude*3.1415)/180)+ ->cos((23.146436*3.1415)/180)*cos((latitude*3.1415)/180)*cos((113.323568*3.1415)/180-(longitude*3.1415)/180) ->)*6370.996 ->)<=1; +----+-----------+----------------+---------------+ |id|name|longitude|latitude| +----+-----------+----------------+---------------+ |2|林和西|113.3306110000|23.1472340000| +----+-----------+----------------+---------------+
以上这篇mysql搜寻附近N公里内数据的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。