1. 程式人生 > >根據經緯度遠近排序sql(MySQL,Oracle)

根據經緯度遠近排序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