V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
male110
V2EX  ›  问与答

PHP mysql 有经纬度计算距离的问题

  •  
  •   male110 · 2018-03-14 15:46:33 +08:00 · 1102 次点击
    这是一个创建于 2444 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有一个租房表里面有经纬度,现在要找出三公里以内的的房源(给出用户所在的经纬度). 在网上搜了一下,有一个矩形的算示,精确度不高,但据说快( http://digdeeply.org/archives/06152067.html)

    define(EARTH_RADIUS, 6371);//地球半径,平均半径为 6371km /** *计算某个经纬度的周围某段距离的正方形的四个点 * *@param lng float 经度 *@param lat float 纬度 *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为 0.5 千米 *@return array 正方形的四个点的经纬度坐标 */ function returnSquarePoint($lng, $lat,$distance = 0.5){

    $dlng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
    $dlng = rad2deg($dlng);
    
    $dlat = $distance/EARTH_RADIUS;
    $dlat = rad2deg($dlat);
    
    return array(
                'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
                'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
                'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
                'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
                );
    

    } //使用此函数计算得到结果后,带入 sql 查询。

    $squares = returnSquarePoint($lng, $lat);

    $info_sql = "select id,locateinfo,lat,lng from lbs_info where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} ";

    问题是,我现在要按距离排序,这个排序,这里应该怎么写?

    1 条回复    2018-03-14 19:59:33 +08:00
    surfire91
        1
    surfire91  
       2018-03-14 19:59:33 +08:00
    知道距离怎么算吗? order by 一下不就好了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1239 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:25 · PVG 07:25 · LAX 15:25 · JFK 18:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.