thinkphp5范围查询_ThinkPHP实现经纬度范围查询

thinkphp5范围查询_ThinkPHP实现经纬度范围查询ThinkPHP 实现经纬度范围查询 JamesLiu 2019 年 05 月 13 日经纬度范围获取 Desc 根据经纬度 半径范围获取附近 User JamesLiu Date 2019 5 13 Time 15 38 param longitude 经度 param latitude 纬度 param raidus 半径范围 单位 米 retur

ThinkPHP实现经纬度范围查询

JamesLiu • 2019 年 05 月 13 日

经纬度范围获取

/

* Desc: 根据经纬度,半径范围获取附近

* User: JamesLiu

* Date: 2019/5/13

* Time: 15:38

* @param $longitude 经度

* @param $latitude 纬度

* @param $raidus 半径范围(单位:米)

* @return array

*/

public function getAround($longitude, $latitude, $raidus)

{

$PI = 3.;

$degree = (24901 * 1609) / 360.0;

$dpmLat = 1 / $degree;

$radiusLat = $dpmLat * $raidus;

$minLat = $latitude – $radiusLat;

$maxLat = $latitude + $radiusLat;

$mpdLng = $degree * cos($latitude * ($PI / 180));

$dpmLng = 1 / $mpdLng;

$radiusLng = $dpmLng * $raidus;

$minLng = $longitude – $radiusLng;

$maxLng = $longitude + $radiusLng;

return array(‘minLng’ => $minLng, ‘maxLng’ => $maxLng, ‘minLat’ => $minLat, ‘maxLat’ => $maxLat);

}

经纬度距离组装成sql

$array = $this->getAround(115., 28., 2000);

$condition[‘longitude’] = array(array(‘EGT’, $array[‘minLng’]), array(‘ELT’, $array[‘maxLng’]), ‘and’);//(`longitude` >= minLng) AND (`longitude` <= maxLng)

$condition[‘latitude’] = array(array(‘EGT’, $array[‘minLat’]), array(‘ELT’, $array[‘maxLat’]), ‘and’);//(`latitude` >= minLat) AND (`latitude` <=maxLat)

两点经纬度距离计算

/

* Desc: 求两个已知经纬度之间的距离,单位为米

* User: JamesLiu

* Date: 2019/5/13

* Time: 16:02

* @param $lng1

* @param $lat1

* @param $lng2

* @param $lat2

* @return float|int

*/

private function getDistance($lng1, $lat1, $lng2, $lat2)

{

// 将角度转为狐度

$radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度

$radLat2 = deg2rad($lat2);

$radLng1 = deg2rad($lng1);

$radLng2 = deg2rad($lng2);

$a = $radLat1 – $radLat2;

$b = $radLng1 – $radLng2;

$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;

return $s;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219044.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午10:55
下一篇 2026年3月17日 下午10:56


相关推荐

  • java二维对象数组_java 二维数组和对象数组

    java二维对象数组_java 二维数组和对象数组1.二维数组:二维数组就是存储一维数组(内存地址/引用)的数组2.二维数组的初始化1)intintA[][]={{1,2},{2,3},{3,4,5}};2)int[][]intB=newint[3][5];3)int[]intC[]=newint[3][];intC[0]=newint[2];intC[1]=newint[3];intC[2]=newint[5];1…

    2022年6月10日
    57
  • MixMatch:半监督学习

    MixMatch:半监督学习MixMatch 半监督学习摘要介绍功能快捷键合理的创建标题 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右 SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的 KaTeX 数学公式新的甘特图功能 丰富你的文章 UML 图表 FLowchart 流程图导出与导入导出导入摘要半监督学习已被证明是利用未标

    2026年3月18日
    2
  • 微信小程序弹窗总结

    微信小程序弹窗总结我们在开发小程序的时候 需要使用到不同的弹窗这里给大家总结一下微信小程序的弹窗微信小程序弹窗种类弹窗总类 wx showModal wx showLoading wx showActionSh wx showToast 有时候我们可能不知道要什么弹窗 那么就可以使用排除法 是不是加载的加载中使用 wx showLoading 是不是使用要用户确认的 要用户确认的使用 wx showModal 是不是有多个选项要用户选的 多个选项要用户选的用 wx showActionSh

    2026年3月19日
    2
  • 微信公众平台开发-入门教程

    微信公众平台开发-入门教程预备篇 1 申请微信公众账号 微信公众平台地址 https mp weixin com 微信开发官方说明文档 http mp weixin com wiki home 微信开发测试公众账号申请 http mp weixin com debug cgi bin sandbox t sandbox login 打开后点击登录 用自己的微信号扫一扫就会发放一个相应的

    2026年3月19日
    2
  • 安装MySQL8.0_mysql版本命令

    安装MySQL8.0_mysql版本命令第一步:下载下载地址:https://dev.mysql.com/downloads/file/?id=476233第二步:选择文件夹,将压缩包解压我这里放到了E盘第三步:创建my.ini配置文件[mysql]#设置mysql客户端默认字符集default-character-set=utf8[mysqld]#设置3306端口port=3306#…

    2025年11月15日
    5
  • 图片压缩最优方案

    图片压缩最优方案

    2022年3月1日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号