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
  • 相关阅读:
    Dubbo (开源分布式服务框架)
    Springboot+Jpa的使用
    springboot(十二):springboot如何测试打包部署
    Java NIO:IO与NIO的区别
    eclipse下搭建shell脚本编辑器--安装开发shell的eclipse插件shelled
    spring boot
    【微服务架构】SpringCloud组件和概念介绍
    java正则表达式
    java的反射机制原理
    nginx代理服务器
  • 原文地址:https://www.cnblogs.com/zlf2000/p/12930372.html
Copyright © 2011-2022 走看看