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
  • 相关阅读:
    Android 学习笔记5程序开发模式&拨号器&短信发送器小例程
    Android学习笔记6日志输出&单元测试
    utkernel 移植时调试方法
    在eclipse中查看Android SDK源代码
    (转载)怎样改进数据库的查询性能?
    asp.net 编程模型
    数据回传
    在博客园记录我的成长
    LeetCode14.最长公共前缀
    LeetCode206.反转链表
  • 原文地址:https://www.cnblogs.com/zlf2000/p/12930372.html
Copyright © 2011-2022 走看看