一. 根据当前位置计算四周的经纬度

/*** 根据当前位置计算四周的经纬度* @param $lng* @param $lat* @param float $distance* @return array*/
function returnSquarePoint($lng, $lat, $distance = 0.5)
{$earthRadius = 6378138;$dlng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat)));$dlng = rad2deg($dlng);$dlat = $distance / $earthRadius;$dlat = rad2deg($dlat);return 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));
}

二. 根据经纬度计算范围

/*** 根据经纬度计算范围* @param $lat1* @param $lng1* @param $lat2* @param $lng2* @return float*/
function getDistance($lat1, $lng1, $lat2, $lng2)
{$earthRadius = 6378138;// 近似地球半径米                         // 转换为弧度$lat1 = ($lat1 * pi()) / 180;$lng1 = ($lng1 * pi()) / 180;$lat2 = ($lat2 * pi()) / 180;$lng2 = ($lng2 * pi()) / 180;           // 使用半正矢公式  用尺规来计算$calcLongitude = $lng2 - $lng1;$calcLatitude = $lat2 - $lat1;$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);$stepTwo = 2 * asin(min(1, sqrt($stepOne)));$calculatedDistance = $earthRadius * $stepTwo;return round($calculatedDistance);
}

三. 通过经纬度根据距离从近到远排序

/*** 通过经纬度根据距离从近到远排序* @param $lat* @param $lng* @return mixed*/
function computePoint($lat, $lng)
{$page = 1;$pageSize = 7;$EARTH = 6378.137;      // 固定参数 地球半径$PI = 3.1415926535898;  // 固定参数 圆周率$list = db('work')->alias('wk')->field("wk.id,wk.work_name,wk.age,wk.teach,wk.gwbqid,wk.start_money,wk.work_description,wk.xz_id,wk.category,cp.company_id,cp.company_name,cp.la,cp.lo,(2 * $EARTH* ASIN(SQRT(POW(SIN($PI*(" . $lat . "-cp.la)/360),2)+COS($PI*" . $lat . "/180)* COS(cp.la * $PI/180)*POW(SIN($PI*(" . $lng . "-cp.lo)/360),2)))) as juli")->order('create_time desc,juli asc')->page($page, $pageSize)->select()->toArray();return $list;
}

四. 根据经纬度查询地理位置

/*** 根据经纬度查询地理位置* @param $lat* @param $lng*/
function myLocation($lat, $lng)
{$url = "http://api.map.baidu.com/geocoder/v2/?ak=YQH8OyfGcvOsPlHdnssSpkulaSNVgL0N&callback=renderReverse&location=$lat,$lng&output=json&pois=1";$res = file_get_contents($url);$lres = ltrim($res, "renderReverse && renderReverse(");$rres = rtrim($lres, ")");echo $rres;
}

五. 根据经纬度计算直线距离

/*** 根据经纬度计算直线距离* @param $lat1* @param $lng1* @param $lat2* @param $lng2* @return float|int*/
function getDistances($lat1, $lng1, $lat2, $lng2)
{define('PI', 3.1415926535898);define('EARTH_RADIUS', 6378.137);$radLat1 = $lat1 * (PI / 180);$radLat2 = $lat2 * (PI / 180);$a = $radLat1 - $radLat2;$b = ($lng1 * (PI / 180)) - ($lng2 * (PI / 180));$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));$s = $s * EARTH_RADIUS;$s = round($s * 10000) / 10000;return $s * 1000;
}

六. 根据经纬度和半径计算出范围

/*** 根据经纬度和半径计算出范围* @param string $lat 纬度* @param String $lng 经度* @param float $radius 半径* @return Array 范围数组*/
function calcScope($lat, $lng, $radius)
{$degree = (24901 * 1609) / 360.0;$dpmLat = 1 / $degree;$radiusLat = $dpmLat * $radius;$minLat = $lat - $radiusLat;       // 最小纬度$maxLat = $lat + $radiusLat;       // 最大纬度$mpdLng = $degree * cos($lat * (3.141592 / 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;
}

七. 获取两个经纬度之间的距离

/*** 获取两个经纬度之间的距离* @param string $lat1 纬一* @param String $lng1 经一* @param String $lat2 纬二* @param String $lng2 经二* @return float  返回两点之间的距离*/
function calcDistance($lat1, $lng1, $lat2, $lng2)
{if (empty($lat1) || empty($lng1) || empty($lat2) || empty($lng2)) {return false;}/** 转换数据类型为 double */$lat1 = doubleval($lat1);$lng1 = doubleval($lng1);$lat2 = doubleval($lat2);$lng2 = doubleval($lng2);$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);
}

PHP实现的7组经纬度与距离的计算函数相关推荐

  1. 【已知一点经纬度和距离,计算另一点的经纬度】

    根据一点经纬度和距离,计算另一点的经纬度 计算代码 推理过程 计算推导 计算摄像头到目标检测点得距离d,详见: https://blog.csdn.net/qq_41694461/article/de ...

  2. 已经一点经纬度和距离,计算另一点的经纬度

    转自:https://www.jianshu.com/p/1d71ec4367d4 因为有需求,在知道一点经纬度和距离的情况下,需要知道另一点的经纬度.之前在网上也有查找,也有不少的案例,但是多数都是 ...

  3. 已知一点经纬度和距离,计算另一点的经纬度

    因为有需求,在知道一点经纬度和距离的情况下,需要知道另一点的经纬度. 之前在网上也有查找,也有不少的案例,但是多数都是语焉不详,看不太明白.后来自己整理和重新再思考了下,这里给出一个自认为说得还算比较 ...

  4. 经纬度计算---已知一点经纬度和距离,计算其他任意点经纬度

    经纬度计算关系 纬度计算只与地球半径(周长)有关: 经度计算与地球半径(周长)及所处纬度相关. 计算公式 赤道半径:ARC = 6371.393*1000 所求点到已知点的距离:垂直距离lath(所求 ...

  5. mysql 计算gps坐标距离_mysql、sqlserver和php计算GPS经纬度坐标距离

    摘要:mysql.sqlserver.oracle和php计算GPS经纬度坐标距离 mysql计算GPS经纬度距离DELIMITER $$ CREATEDEFINER=`root`@`localhos ...

  6. Mysql根据经纬度和距离检索符合条件的数据浅析

    假设已知坐标lat1,lng1,距离distance 方法1:定义数据库函数方法 DROP FUNCTION IF EXISTS `getDistance`; DELIMITER ;; CREATE ...

  7. iOS自定义组与组之间的距离以及视图

    iOS自定义组与组之间的距离以及视图 //头视图高度 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(N ...

  8. 计算器计算经纬距离_经纬度距离角度计算工具

    经纬度距离角度计算器是一款经纬度计算工具,该软件可以快速计算出航图上任意两点之间的距离和任意三点所成夹角的角度,准确性非常高,而且使用期开也很简单,用户只需要输入两个地点的经纬度软件就可以计算出标准的 ...

  9. 获取经纬度之间距离的Java工具类

    2019独角兽企业重金招聘Python工程师标准>>> public class GeoUtil { /*** 根据经纬度和距离返回一个矩形范围* * @param lng* 经度* ...

  10. 如何使用sql语句算两经纬度的距离

    本文章转载于https://segmentfault.com/a/1190000013922206 经纬度计算距离公式 对以上公式描述 1.Lung1 Lat1表示A点经纬度, Lung2 Lat2表 ...

最新文章

  1. 045_Unicode对照表十一
  2. TCL with SNPS llengthlappendget_cellsget_ports
  3. C语言十六进制转换为八进制(附完整源码)
  4. 【瞎搞】 Codeforces Round 276 DIV 2 C.Bits
  5. 【Java】如何较好地将int转化成String
  6. rust投递箱连接箱子_拆了的快递包装丢哪里?闵行试行24小时开放的网购包装回收箱...
  7. 项目小记: IFRAME引起内存泄露的解决方法
  8. 一起谈.NET技术,DataTable 深入解析数据源绑定原理之高级篇
  9. VSCode 修改界面字体 代码字体 终端字体
  10. 一个写着玩的 bitcoin 客户端
  11. 新手焊接电路板_手工焊接电路板的步骤
  12. 初探摩根大通的企业级以太坊区块链解决方案—Quorum
  13. 清华大学计算机研究生课程表
  14. 短信也能玩出新花样?听阿里云产品运营畅聊“智能消息”服务
  15. NoSQL 一致性[详解]更新一致性
  16. 计算机数学与数学文化-定义
  17. GitHub 上值得收藏的100个精选前端项目!你知道几个?
  18. js日期字符串(年月日)与时间戳的转换
  19. windows权限维持方法详解
  20. 我入职阿里后,才知道原来简历这么写

热门文章

  1. Windows系统下通过文件路径进入相应DOS界面
  2. word怎么显示计算机数字,在word中输入数字时为什么出现符号
  3. mysql中explain是什么_MySQL中EXPLAIN的解释_MySQL
  4. (一)八卦起点作家转会纵横-------- 比较全(包括JJ,起点ceo.邪月MM的发言的发言)...
  5. 【机器学习-白板推导系列】学习笔记---支持向量机和主成分分析法
  6. WinRAR分割超大文件
  7. fatal: unsafe repository is owned by someone else 的解决方法
  8. Touristis(LCA)
  9. angular 访问图片路径错误
  10. 解决“网易邮箱提醒:一次被阻止的收信行为”