LBS定位算法

最近做LBS定位的相关程序,收集了一些关于LBS定位获取距离的算法:

算法1、

select 6371.012 *
acos(cos(acos(-1) / 180 * d.LATITUDE) *
cos(acos(-1) / 180 * 31.885972440801) *
cos(acos(-1) / 180 * d.LONGITUDE - acos(-1) / 180 * 117.30923429642) +
sin(acos(-1) / 180 * d.LATITUDE) *
sin(acos(-1) / 180 * 31.885972440801))*1 as a,
id,name
from loc_data d
where 6371.012 *
acos(cos(acos(-1) / 180 * d.LATITUDE) *
cos(acos(-1) / 180 * 31.885972440801) *
cos(acos(-1) / 180 * d.LONGITUDE - acos(-1) / 180 * 117.30923429642) +
sin(acos(-1) / 180 * d.LATITUDE) *
sin(acos(-1) / 180 * 31.885972440801))*1 < 1 order by a asc

原文地址:http://www.wizzer.cn/?p=2254

 

算法2:

sql语句查询经纬度范围

指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据。
经度:113.914619
纬度:22.50128
范围:2km
longitude为数据表经度字段
latitude为数据表纬度字段
SQL在mysql下测试通过,其他数据库可能需要修改
SQL语句如下:
select * from location where sqrt( ( ((113.914619-longitude)*PI()*12656*cos(((22.50128+latitude)/2)*PI()/180)/180) * ((113.914619-longitude)*PI()*12656*cos (((22.50128+latitude)/2)*PI()/180)/180) ) + ( ((22.50128-latitude)*PI()*12656/180) * ((22.50128-latitude)*PI()*12656/180) ) )<2

原文地址:http://my.oschina.net/laserdance/blog/40854

 

算法3:

set @x = 22.556217, @y = 113.915842; //位置
SELECT *, (ACOS(SIN((latitude * 3.1415) / 180) * SIN((@x * 3.1415) / 180) + COS((latitude * 3.1415) / 180) * COS((@x * 3.1415) / 180) * COS((longitude * 3.1415) / 180 - (@y * 3.1415) / 180)) * 6371 * 1000) AS DISTINCE
FROM seller
WHERE (ACOS(SIN((latitude * 3.1415) / 180) * SIN((@x * 3.1415) / 180) + COS((latitude * 3.1415) / 180) * COS((@x * 3.1415) / 180) * COS((longitude * 3.1415) / 180 - (@y * 3.1415) / 180)) * 6371 * 1000) <= 500
ORDER BY DISTINCE ASC


目前在项目中使用算法3.

 

 

300*300
 文章首页关于迷茫时代关于我写意人生
版权所有:迷茫时代 All rights reserved   
执行时间:0.00445 秒