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 相关文章推荐
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
ezSQL PHP数据库操作类库
May 16 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
php使用百度ping服务代码实例
Jun 19 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
php实现读取内存顺序号
Mar 29 PHP
PHP生成条形码大揭秘
Sep 24 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
php常用字符函数实例小结
Dec 29 PHP
php中序列化与反序列化详解
Feb 13 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 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调用三种数据库的方法(1)
2006/10/09 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
微信小程序自定义select下拉选项框组件的实现代码
2018/08/28 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
邀请书格式范文
2015/02/02 职场文书
护士个人年终总结
2015/02/13 职场文书
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
python 详解turtle画爱心代码
2022/02/15 Python
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers