PHP 判断当前GPS是否在中国

  突然需要这样的一个逻辑判断,然后就开始处理了,这是属于工作上的需要了,果然忙起来就很惨,现在都四点了。

中国GPS坐标

  具体代码请参考GITHUB的数据,引用一个判断点在多边形的代码,具体方法就是判断一个点水平和垂直方向有几个焦点,基数即为在内部,相关算法为光线投射算法

/**
 * 判断GPS坐标是否在多边形中
 * @param array  $list [维度,经度] 的形式,取0,1键值
 * @param float $lat  维度
 * @param float $lng  经度
 * @return bool
 */

public static function IsInsidePolygon($list, $lat, $lng): bool
{
    $inside = false;
    $prePoint = $list[0];
    $length = count($list);
    for($i = 1; $i < $length; $i++) {
        $nextPoint = $list[$i];
        if($lng > min($prePoint[1], $nextPoint[1])
            && $lng <= max($prePoint[1], $nextPoint[1])
            && $lat <= max($prePoint[0], $nextPoint[0])
            && $prePoint[1] != $nextPoint[1]
        ) {
            $xinters = ($lng - $prePoint[1]) * ($nextPoint[0] - $prePoint[0]) / ($nextPoint[1] - $prePoint[1]) + $prePoint[0];
            if($prePoint[0] == $nextPoint[0] || $lat <= $xinters)
                $inside ^= true;
        }
        $prePoint = $nextPoint;
    }
    return (bool)$inside;
}

原理什么的不多说,太复杂了,参考文章可以去看博客园的文章,参考而来,算法和大部分坐标都是:
http://www.cnblogs.com/Aimeast/archive/2012/08/09/2629614.html

8条评论在“PHP 判断当前GPS是否在中国”

回复 宁怡   取消