经纬度相关方法

本篇主要分享下经纬度相关的一些方法

前段时间真的是太忙,用到的太多的方法什么都没有整理

现整理部分自己使用过的方法,一是方便自己,二也是方便他人

还有就是博客园最少也得保持一月更新一篇吧

不多说了,分享相关方法:

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

该方法主要借鉴与以下两个博客

  大大博客 地址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日

 

posted @ 2020-06-30 18:24  御风琊穹  阅读(291)  评论(0编辑  收藏  举报

春风十里,我喜欢你。可是你喜欢的人不喜欢你,哈哈....
人来人往,莫失莫忘。最终还是选择淡忘于回忆之中...
落日余晖,待你而归。但你终究不是为我而归..
一米阳光,温暖安放;心若向阳,无谓悲伤;轻安喜乐,次第花开 。