【小编推荐】关于根据经纬度计算距离的一点心得

2016-05-21   |   发布者:梁国芳   |   查看:3320次

php
关于根据经纬度计算距离的一点心得
    关键mysql语句(根据需要可直接使用):
    select *,(6378.138 * 2 * asin(sqrt(pow(sin((".$weidu." * pi() / 180 - weidu * pi() / 180) / 2),2) + cos(".$weidu." * pi() / 180) * cos(weidu * pi() / 180) * pow(sin((".$jingdu." * pi() / 180 - jingdu * pi() / 180) / 2),2))) * 1000) AS distance FROM `wts_restaurant` ORDER BY distance  limit $offset ,$pagesize;
    语句中的$weidu,$jingdu为已知点的纬度和经度,weidu、jingdu为数据库中的字段
    根据经纬度计算两点间距离公式(单位米)
    第一点经纬度:lng1 lat1
    第二点经纬度:lng2 lat2
    round(6378.138*2*asin(sqrt(pow(sin( (lat1*pi()/180-lat2*pi()/180)/2),2)+cos(lat1*pi()/180)*cos(lat2*pi()/180)* pow(sin( (lng1*pi()/180-lng2*pi()/180)/2),2)))*1000)
    例子:
    已知一个点的经度:114.173881 纬度:22.299439
    数据库中存的经度字段名称:lng 纬度字段名称:lat
    select store_id,lng,lat, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.299439*PI()/180-lat*PI()/180)/2),2)+COS(22.299439*PI()/180)*COS(lat*PI()/180)*POW(SIN((114.173881*PI()/180-lng*PI()/180)/2),2)))*1000) AS juli
    FROM store_info
    ORDER BY juli DESC
    LIMIT 316