zoukankan      html  css  js  c++  java
  • thinkphp根据经纬度计算距离

                $field = 'ACOS(SIN(('.$addr["lat"].' * 3.1415) / 180 ) *SIN((a.lat * 3.1415) / 180 ) +COS(('.$addr["lat"].' * 3.1415) / 180 )
                    * COS((a.lat * 3.1415) / 180 ) *COS(('.$addr["lng"].' * 3.1415) / 180 - (a.lng * 3.1415) / 180 ) ) * 6380 as distance';
                $dot=Db::name('dot')
                    ->alias('a')
                    ->field($field.",dot_store_name,dot_door_photo,id,business_status,service_distance,xysm")
                    ->where($where)
                    ->having( "distance<=service_distance")
                    ->order("distance asc")
    //                ->page($page,$limit)
                    ->select();
    thinkphp 5.1 
     mysql 5.7版本以上
     https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html  
     
     
    $lists = appcarsmodelWash::fieldRaw("round(st_distance_sphere(point(".$data["longitude"].",".$data["latitude"]."),point(`longitude`,`latitude`))) distance ")
    ->where("status",1)
    ->orderRaw($order .",is_recommend desc")
    ->paginate();
     
    原生sql
    select shop.* 
    from
    (
    select * ,round(st_distance_sphere(point(120.012484,30.298926),point(`longitude`,`latitude`))) dis
     from test111.store 
    having dis < 5000
     order by dis limit 100000 ) shop
    group by shop.item_id
    order by dis
    limit 10
  • 相关阅读:
    用Visual C#实现文件下载
    解读C#中的规则表达式
    NET(C#)连接各类数据库集锦
    C#中编写多线程(1)——起步
    C#中的常用加密算法与其它语言的兼容性
    C#的事件处理机制应用
    TCP IP协议之通信详解
    手把手教你AspNetCore WebApi:认证与授权
    TCP IP协议之初识
    mysql中exit和in的区别
  • 原文地址:https://www.cnblogs.com/zlf2000/p/12930372.html
Copyright © 2011-2022 走看看