mysql距离计算,单位m,以及排序
lng 经度 lat 纬度
一般地图上显示的坐标顺序为,纬度在前(范围-90~90),经度在后(范围-180~180)
传入参数 纬度 40.0497810000 经度 116.3424590000
/*传入的参数为 纬度 纬度 经度 ASC升序由近至远 DESC 降序 由远到近 */
SELECT
id, name, address, ROUND( 6378.138 * 2 * ASIN( SQRT( POW( SIN( ( 40.0497810000 * PI() / 180 - lat * PI() / 180 ) / 2 ), 2 ) + COS(40.0497810000 * PI() / 180) * COS(lat * PI() / 180) * POW( SIN( ( 116.3424590000 * PI() / 180 - lng * PI() / 180 ) / 2 ), 2 ) ) ) * 1000 ) AS 距离FROM oc_districtHAVING 距离 < 400000ORDER BY 距离 ASC
至此,我们就能清楚的查看到纬度 40.0497810000 经度 116.3424590000 距离 小区表中的每个小区到传入地点的距离(单位 m)
方法二:通过MySQL的POIN方法
st_distance 计算的结果单位是度,需要乘111195(地球半径6371000*PI/180)是将值转化为米。 sql: SELECT *, (st_distance (point (lon,lat),point (116.3424590000,40.0497810000))*111195/1000 )as juli FROM customer ORDER BY juli ASC