PHP查询附近的人及其距离的实现方法
2024-09-07 21:15:08
1、附近的人
//获取该点周围的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']} ";
2、两点之间的距离
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 />';
}
转“https://www.php.cn/php-weizijiaocheng-316.html”
最新文章
- Linux学习之五--常用操作
- Python单例模式
- 有关segue的简介
- PHP超时处理全面总结(转)
- 用urllib2实现一个下载器的思路
- iOS开发之自定义输入框(利用UITextField及UITextView)
- WCF的基本知识-仅Http绑定的认知
- Swift - 启动时的向导页(新手引导)的制作
- 蓝桥网试题 java 入门训练 Fibonacci数列
- JavaScript call()和apply()
- AssetBundle实现服务器下载并从本地读取
- Ubuntu命令行连接WPA/WPA2无线网线
- 51 nod 1055 最长等差数列(dp)
- bzoj 4008: [HNOI2015]亚瑟王
- Android ROM开发(二)——ROM架构以及Updater-Script脚本分析,常见的Status错误解决办法
- C#类型(一)
- MVC ModelState.AddModelError使用
- Windows 10 运行原生Bash【Ubuntu】
- java抽象类和抽象方法
- mysql查询表达式解析
热门文章
- 处理海量数据的grep、cut、awk、sed 命令
- JDOJ 1789: 高精度A+B
- JavaScript中的this—你不知道的JavaScript上卷读书笔记(三)
- [LeetCode] 9. Palindrome Number 验证回文数字
- TCP三次握手第三次握手时ACK丢失怎么办
- 【转】机器学习实战之K-Means算法
- [LeetCode] 834. Sum of Distances in Tree 树中距离之和
- Webpack 一些核心概念了解
- find square root
- 解决windows server 2008R2自动关机