PHP查询附近的人及其距离的实现方法


Posted in PHP onMay 11, 2016

本文实例讲述了PHP查询附近的人及其距离的实现方法。分享给大家供大家参考,具体如下:

<?php
//获取该点周围的4个点
$distance = 1;//范围(单位千米)
$lat = 113.873643;
$lng = 22.573969;
define('EARTH_RADIUS', 6371);//地球半径,平均半径为6371km
$dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));
$dlng = rad2deg($dlng);
$dlat = $distance/EARTH_RADIUS;
$dlat = rad2deg($dlat);
$squares = array('left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),
        'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),
        'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),
        'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)
        );
print_r($squares['left-top']['lat']);
//从数库查询匹配的记录
$info_sql = "select * from `A` where lat<>0 and lat>{$squares['right-bottom']['lat']} and lat<{$squares['left-top']['lat']} and lng>{$squares['left-top']['lng']} and lng<{$squares['right-bottom']['lng']} ";
//获取两点之间的距离
function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) {
  $theta = $longitude1 - $longitude2;
  $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
  $miles = acos($miles);
  $miles = rad2deg($miles);
  $miles = $miles * 60 * 1.1515;
  $feet = $miles * 5280;
  $yards = $feet / 3;
  $kilometers = $miles * 1.609344;
  $meters = $kilometers * 1000;
  return compact('miles','feet','yards','kilometers','meters'); 
}
$point1 = array('lat' => 40.770623, 'long' => -73.964367);
$point2 = array('lat' => 40.758224, 'long' => -73.917404);
$distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']);
foreach ($distance as $unit => $value) {
  echo $unit.': '.number_format($value,4).'<br />';
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
APMServ使用说明
Oct 23 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
Apr 26 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
php简单实现数组分页的方法
Apr 30 PHP
php上传图片类及用法示例
May 11 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
php实现JWT(json web token)鉴权实例详解
Nov 05 PHP
Smarty分页实现方法完整实例
May 11 #PHP
php简单获取复选框值的方法
May 11 #PHP
php上传图片类及用法示例
May 11 #PHP
php通过smtp邮件验证登陆的方法
May 11 #PHP
Smarty变量用法详解
May 11 #PHP
基于PHP实现商品成交时发送短信功能
May 11 #PHP
Smarty环境配置与使用入门教程
May 11 #PHP
You might like
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
PHP return语句的另一个作用
2014/07/30 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
基于jQuery实现页面搜索功能
2020/03/26 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python中partial()基础用法说明
2018/12/30 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
2019/08/06 Python
详解Django CAS 解决方案
2019/10/30 Python
python re模块常见用法例举
2021/03/01 Python
美国高档帽子网上商店:Hats.com
2018/08/09 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
年度考核自我鉴定
2014/03/19 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers