偶尔看到一个在数据库里直接计算的算法,比网上查到的好多了。。。
SELECT *,ROUND(
6378.138 * 2 * ASIN(SQRT(POW(SIN((' . $lat . ' * 3.141592654 / 180 - location_x * 3.141592654 / 180) / 2),2) +
COS(' . $lat . ' * 3.141592654 / 180) * COS(location_x * 3.141592654 / 180) * POW(SIN((' . $lng . ' * 3.141592654 / 180 - location_y * 3.141592654 / 180) / 2),2))) * 1000) as distance From (TableName) WHERE 1=1 order by distance desc
记下以备后用。
红标为数据库内的值,