博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 附近的人
阅读量:6292 次
发布时间:2019-06-22

本文共 1908 字,大约阅读时间需要 6 分钟。

思路:

  首先,我们知道自己的经纬度,知道自己要搜索的范围(半径),我们就可以得到一个已自己为中心的范围圈。然后计算出范围内的经纬度,也就是对于的附近的人。

第一步:我们先声明一个函数,用作计算经纬度的范围:

/** * 根据经纬度和半径计算出范围 * @param string $lat 纬度 * @param String $lng 经度 * @param float $radius 半径  单位米 * @return Array 范围数组 */function calcScope($lat, $lng, $radius) {    $PI = 3.14159265;    $degree = (24901*1609)/360.0;    $dpmLat = 1/$degree;     $radiusLat = $dpmLat*$radius;    $minLat = $lat - $radiusLat;    // 最小纬度    $maxLat = $lat + $radiusLat;    // 最大纬度     $mpdLng = $degree*cos($lat * ($PI/180));    $dpmLng = 1 / $mpdLng;    $radiusLng = $dpmLng*$radius;    $minLng = $lng - $radiusLng;   // 最小经度    $maxLng = $lng + $radiusLng;   // 最大经度     /** 返回范围数组 */    $scope = array(        'minLat'  => $minLat,   //最小纬度        'maxLat'  => $maxLat,   //最大纬度        'minLng'  => $minLng,   //最小经度        'maxLng'  => $maxLng    //最大经度    );    return $scope;}

第二步:第一步中返回的数组已经包含了 最大最小的经纬度, 那我们就以此为条件 ,去数据库进行查询。

提供sql语句,根据自己的框架进行修改

'SELECT `字段` FROM `表名` WHERE `Latitude` < '.$scope['maxLat'].' and `Latitude` > '.$scope['minLat'].' and `Longitude` < '.$scope['maxLng'].' and `Longitude` > '.$scope['minLng'];

第三步:获取到附近的人的坐标以后,我们还需要知道自己距离附近的人的距离是多少

/** * 获取两个经纬度之间的距离 * @param string $lat1 纬一 * @param String $lng1 经一 * @param String $lat2 纬二 * @param String $lng2 经二 * @return float 返回两点之间的距离 */function calcDistance($lat1, $lng1, $lat2, $lng2) {    /** 转换数据类型为 double */    $lat1 = doubleval($lat1);    $lng1 = doubleval($lng1);    $lat2 = doubleval($lat2);    $lng2 = doubleval($lng2);    /** 以下算法是 Google 出来的,与大多数经纬度计算工具结果一致 */    $theta = $lng1 - $lng2;    $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));    $dist = acos($dist);    $dist = rad2deg($dist);    $miles = $dist * 60 * 1.1515;    return ($miles * 1.609344);}

到此,一个简单的附近的人的 程序就算是写好了。可以根据自己的项目需求进行调整,如,运行效率,运行方式等等。

 

转载于:https://www.cnblogs.com/zheart/p/10642347.html

你可能感兴趣的文章
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
ClientScriptManager与ScriptManager向客户端注册脚本的区别
查看>>
js和php中几种生成验证码的方式
查看>>
android UI进阶之仿iphone的tab效果1
查看>>
这是我的第1个C#程序(向控制台输出一句话)
查看>>
html
查看>>
Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第三部分:SqlField)
查看>>
颜色空间系列4: RGB和YDbDr颜色空间的转换及优化算法
查看>>
Unity C# 设计模式(七)适配器模式
查看>>
Lancel sac négociation avec insistance que nous pourrions réaliser de quelle route
查看>>
空白表单提交到后台的数据类型总结(java)
查看>>
Vue问题区
查看>>
[原]Unity3D深入浅出 - Shader基础开发
查看>>