经纬度相关方法
本篇主要分享下经纬度相关的一些方法
前段时间真的是太忙,用到的太多的方法什么都没有整理
现整理部分自己使用过的方法,一是方便自己,二也是方便他人
还有就是博客园最少也得保持一月更新一篇吧
不多说了,分享相关方法:
1判定经纬度是否正确
/** * 经度判定是否合法 */ function islong($truename) { $preg = '/^-?((0|1?[0-8]?[0-9]?)(([.][0-9]{1,10})?)|180(([.][0]{1,10})?))$/'; return (bool) preg_match($preg, $truename); } /** * 维度判定是否合法 */ function isdime($truename) { $preg = '/^-?((0|[1-8]?[0-9]?)(([.][0-9]{1,10})?)|90(([.][0]{1,10})?))$/'; return (bool) preg_match($preg, $truename); } #使用方法 if(!islong($long)) { return '请输入正常的经度值'; } if(!islong($dime)) { return '请输入正常的纬度值'; }
// 中国国内的经纬度范围:
// 经度:72.004 < x < 137.8347
// 纬度:0.8293 < y < 55.8271
该方法主要借鉴与以下两个博客
ithanmang 大大博客 地址:https://blog.csdn.net/ithanmang/article/details/86544418
jeff151013 大大博客 地址:https://www.cnblogs.com/jeff151013/p/11171995.html
2.根据经纬度来获取两点对应距离
/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $latitude1 起点纬度 * @param Decimal $longitude2 终点经度 * @param Decimal $latitude2 终点纬度 * @param Int $unit 单位 1:米 2:公里 * @param Int $decimal 精度 保留小数位数 * @return Decimal */ function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit=2, $decimal=2) { $EARTH_RADIUS = 6370.996; // 地球半径系数 $PI = 3.1415926;
$radLat1 = $latitude1 * $PI / 180.0; $radLat2 = $latitude2 * $PI / 180.0; $radLng1 = $longitude1 * $PI / 180.0; $radLng2 = $longitude2 * $PI /180.0; $a = $radLat1 - $radLat2; $b = $radLng1 - $radLng2; $distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2))); $distance = $distance * $EARTH_RADIUS * 1000; if($unit==2){ $distance = $distance / 1000; } return round($distance, $decimal); }
本方法借鉴方法地址未存储,望原文地址大佬看到勿怪
另,在查找过程中看到的一个测试连接地址:https://www.nhc.noaa.gov/gccalc.shtml
今天就暂时这么多吧
2020年06月30日