【微信开发】微信小程序通过经纬度计算两地距离php代码实现

需求: 要求做个根据用户当前位置获取周围商家地址,并且按照由近到远排序,

方法一: 代码层实现

封装方法:

/**
 *  @desc 根据两点间的经纬度计算距离
 *  @param float $lat 纬度值
 *  @param float $lng 经度值
 *  @param $status true KM,M显示;false 只返回M
 */
function system_getdistance($lat1, $lng1, $lat2, $lng2, $status = true, $single = true)
{
    $earthRadius = 6367000;
    //approximate radius of earth in meters
    $lat1 = (floatval($lat1) * pi()) / 180;
    $lng1 = (floatval($lng1) * pi()) / 180;
    $lat2 = (floatval($lat2) * pi()) / 180;
    $lng2 = (floatval($lng2) * pi()) / 180;
    $calcLongitude = $lng2 - $lng1;
    $calcLatitude = $lat2 - $lat1;
    $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
    $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
    $calculatedDistance = $earthRadius * $stepTwo;
    if (!$single) {
        return round($calculatedDistance);
        exit;
    }
    //把大于1000米的转换成km
    if ($status) {
        $m = round($calculatedDistance) / 1000;
        return $m > 1 ? round($m, 1) . "km" : ($m * 1000) . "m";
        //return round($m,2);       //这个是我在程序中用的,以为排序比较方便,大家根据需求选用
    } else {
        return round($calculatedDistance) . "m";
    }
}

调用:

    /**
     * @param Request $request
     * @return array
     * 获取分类商店,并按距离排序
     */
    function getShop(Request $request){
        $c_id = $request->get(‘c_id‘);
        $lat1 = $request->get(‘lat‘);
        $lng1 = $request->get(‘lng‘);
        $lat1U = floatval($lat1)+0.01;
        $lat1D = floatval($lat1)-0.01;
        $lng1U = floatval($lng1)+0.01;
        $lng1D = floatval($lng1)-0.01;
        $data = db(‘store‘)
            ->where(‘c_id‘,$c_id)
            ->where(‘lat‘,‘<‘,$lat1U)      //获取周围经纬度差0.01的商家距离
            ->where(‘lat‘,‘>‘,$lat1D)
            ->where(‘lng‘,‘<‘,$lng1U)
            ->where(‘lng‘,‘>‘,$lng1D)
            ->find();
        $res = json_encode($data);
        $arr1 = json_decode($res,true);
        $arr = [];
       foreach ($arr1 as $k=>$v){
            $res = $this->system_getdistance($lat1,$lng1,$v[‘lat‘],$v[‘lng‘]);
            $arr1[$k][‘km‘] = $res.‘km‘;
            $arr[$k] = $res;
        }
        asort($arr);
        $arr2 = [];
        foreach($arr as $k=>$v){
            $arr2[] = $arr1[$k];
        }
        return $arr2;
    }

方法二: sql 层实现

SELECT
    id,
    lat,
    lng,
    ROUND(
        6378.138 * 2 * ASIN(
            SQRT(
                POW(
                    SIN(
                        (
                            $lat * PI() / 180 - lat * PI() / 180
                        ) / 2
                    ),
                    2
                ) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * POW(
                    SIN(
                        (
                            $lng * PI() / 180 - lng * PI() / 180
                        ) / 2
                    ),
                    2
                )
            )
        ) * 1000
    ) AS distance
FROM
    store
ORDER BY
    distance asc

检索五公里范围以内的s q l

select * from (      
SELECT
    id,
    lat,
    lng,
    ROUND(
        6378.138 * 2 * ASIN(
            SQRT(
                POW(
                    SIN(
                        (
                            $lat * PI() / 180 - lat * PI() / 180
                        ) / 2
                    ),
                    2
                ) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * POW(
                    SIN(
                        (
                            $lng * PI() / 180 - lng * PI() / 180
                        ) / 2
                    ),
                    2
                )
            )
        ) * 1000
    ) AS distance
FROM
    store
ORDER BY
    distance asc
 ) as a where a.distance<=5000

原文地址:https://www.cnblogs.com/richerdyoung/p/11615556.html

时间: 2024-10-11 17:45:21

【微信开发】微信小程序通过经纬度计算两地距离php代码实现的相关文章

根据两点的经纬度计算两地距离

学着做项目需要根据很据给出的两点经纬度信息计算两地的实际距离,查了查,有公式奉上: google地图提供的方法: 相关c#代码如下 private static double rad(double d) { return d * Math.PI / 180.0; } //根据两点的经纬度计算两地距离 public static double GetDistance(double lon1, double lat1, double lon2, double lat2) { double radLa

金华网络公司微信应用号小程序制作开发

微信应用号小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想(让手机不需要更多的内存用于安装一堆无用的app客户端),用户扫一扫或者搜一下即可打开应用.也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题. 应用将无处不在,随时可用,但又无需安装卸载. 基本介绍 微信将应用号“小程序”定义为“一种新的应用形态”(这是让我们可以连接所有我们工作.生活.娱乐所有需要的一种简单的形态).微信方面强调,小程序(应用号).订阅号.服务号.企业号目前是并行的体系. 微信应用号

杭州微信应用号小程序开发解决方案

杭州微信应用号小程序开发[金华腾云科技]微信应用号小程序(应用号)就是用户关注了一个应用号,就像安装了一个App一样.这样微信将被打造成一个全新的appstore,而每一个应用号就是一个个的webapp. 怎么理解这个概念? 下载安装app 太麻烦了,微信的小程序就可以满足你;安装 / 卸载 / 使用小程序,就像关注 / 取关 /进入公众号一样简单;你用完就可以走,不用担心装个 app 占你空间. 杭州微信应用号小程序(应用号)有几个功能? 1.微信应用号小程序(应用号)能实现对App个性功能的

微信应用号小程序开发(金华火爆版)

想必大家都关心微信应用号的最终形态到底是什么样子?怎样将一个「服务号」改造成为「小程序」? 金华腾云科技分享:开发过程吧. OK,为了让大家尽快看到这份教程!今晚开始更新,希望明天一早就能发布第一篇教程!记录开始!看看几天能完成变身吧! 序言开始开发应用号之前,先看看官方公布的「小程序」教程吧!(以下内容来自微信官方公布的「小程序」开发指南) 本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开

微信公众平台小程序开发大牛必备技能

近期在热议微信公众平台小程序,很多程序猿GG们在说不就是网页版的软件么~~~真 是"材"大气粗.然而重点来了~~~程序猿GG们真的会开发么?不要随意吹牛好不好? 接下来,我给程序猿GG们整理了制作小程序的武功秘籍,要知道,H5和JS人才将会很 抢手哟,马上储备技能先~~ 首先,要知道小程序是基于H5开发的,但是用了JS-SDK的框架~~~ 其次,找修炼秘籍~~近乎赠送的价格,给你一身养家本领,还不快快领走~~ 1.    H5精英必备技能: 张伟芝老师的<结合MUI框架完成HTM

微信小程序_微信小程序开发,小程序源码、案例、教程

原文地址:http://whosmall.com/?post=448 本文标签: 微信小程序 小程序源码案例 小程序项目 小程序源码 微信小程序教程 什么是微信小程序? 微信小程序是微信基于微信平台的一个应用发布平台,微信小程序app开发属于原生app组件提供js接口的开发方式,比混合是app的用户体验更好,仅次于原生应用. 不过微信小程序定位于小,要符合轻量易用无需下载,所以从体积上也是有限制,整个小程序应用体积不能超过1M. 微信小程序的应用场景? 微信小程序的应用场景适用于轻量应用,非强交

微信应用号小程序开发(义乌永康火爆版)

微信小程序 微信小程序是什么? 微信应用号是一个APP应用推广平台,微信应用号目前暂定名为“小程序”,使用微信应用号平台,用户关注一个应用号就如同安装一个App一样,而微信应用号就相当于另一个App Store,主要功能就是应用推广. 用户关注一个应用号就如同安装一个App一样,而微信应用号就相当于另一个App Store,主要功能就是应用推广.微信的目的似乎很简单,就是希望把用户使用App的动作都集中在微信上. 金华腾云科技总结:应用号有两大特色:首先APP功能可以直接通过关注应用号来实现,所

微信应用号|小程序,新世界

微信应用号|小程序,新世界 微信,是一种生活方式. 无时无刻的在为我们提供服务,从他的出现,语音对讲的变革,完全颠覆原有社交的打字沟通方式.带我们开启一扇又一扇的大门.它的每一次功能更新,便能掀起互联网圈内的轩然大波.时至今日内测“应用号”开启又能给我们带来怎样的影响呢? >>>> 应用号是什么? 微信之父张小龙把他定义为-小程序,那什么是小程序呢? 张小龙对这款小程序的功能描述是,小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打

微信应用号小程序

微信应用号小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用.也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题. 应用将无处不在,随时可用,但又无需安装卸载. 基本介绍 微信将应用号“小程序”定义为“一种新的应用形态”.微信方面强调,小程序(应用号).订阅号.服务号.企业号目前是并行的体系. 微信应用号小程序的推出并非意味着微信要来充当应用分发市场的角色,而是“给一些优质服务提供一个开放的平台.”一方面,应用号小程序可以借助微