根據經緯度遠近排序sql(MySQL,Oracle)
MySQL:
例子:表名-xs_shop 欄位-latitude緯度 longitude經度 定位的經緯度:22.72114,114.2308
SELECT
s.*,(
6371 * acos (
cos ( radians(22.72114) )
* cos( radians( s.latitude ) )
* cos( radians( s.longitude ) - radians(114.2308) )
+ sin ( radians(22.72114) )
* sin( radians( s.latitude ) )
)
) AS distance
FROM xs_shop s
ORDER BY distance
LIMIT 0 , 2000;
LIMIT 0 , 2000----範圍
Oracle:
例子:表名-xs_shop 欄位-latitude緯度 longitude經度 定位的經緯度:22.72114,114.2308
1.
select s.*,
(2*asin(sqrt(power(sin((114.2308-s.longitude)*3.14159265359/180/2),2)
+cos(22.72114*3.14159265359/180)
*cos(s.latitude*3.14159265359/180)
*power(sin((22.72114-s.latitude)
*3.14159265359/180/2),2)))
*6378.137*1000)
as a
from xms_shop s
order by a;
2.
select s.*,
(sdo_geom.sdo_distance
(mdsys.sdo_geometry(2001,8307,mdsys.sdo_point_type(114.230800,22.721140,0),null,null),
mdsys.sdo_geometry(2001,8307,mdsys.sdo_point_type(s.longitude,s.latitude,0),null,null),0.005))as a
from xms_shop s order by a ;
緯度範圍-90~90,經度範圍-180~180