zoukankan      html  css  js  c++  java
  • PHP 电子围栏算法-不依赖任何第三方接口

    <?php
    
    /**
     * @name 围栏算法,判断一个坐标,是否在围栏里面.如:['113.664673,34.810146','113.681667,34.796896','113.69231,34.794711','113.702009,34.809159']
     * @author macnie <mac@lenmy.com>
     * @param array $fences 围栏,是一组坐标数组 如:113.674458,34.804719
     * @param string $point 要判断的坐标
     * @return bool
     */
    function in_fences($fences, $point) {
        $nvert = count($fences);
        $vertx = [];
        $verty = [];
        list($testy, $testx) = explode(',', $point);
        foreach ($fences as $r) {
            list($lng, $lat) = explode(',', $r);
            $vertx[] = $lat;
            $verty[] = $lng;
        }
        $i = $j = $c = 0;
        for ($i = 0, $j = $nvert - 1; $i < $nvert; $j = $i++) {
            if (( ($verty[$i] > $testy) != ($verty[$j] > $testy) ) &&
                ($testx < ($vertx[$j] - $vertx[$i]) * ($testy - $verty[$i]) / ($verty[$j] - $verty[$i]) + $vertx[$i]))
                $c = !$c;
        }
        return $c;
    }
    
    //围栏map数据
    $fences=[
    '113.626809,34.75027',
        '113.630975,34.752162',
        '113.626102,34.753941'
    ];
    $p="113.633093,34.751396"; //当前的位置
    $res = in_fences($fences,$p);
    var_dump($res);
    

      亲测有效

  • 相关阅读:
    多项式模板整理
    广大附中2019CSP模拟day6
    2019正睿CSP-S模拟赛十连测day6
    NOIP2020 游记
    NOI2020 退役记
    CSP2019 退役记
    目录
    NOI Online 提高
    后缀数组
    待学
  • 原文地址:https://www.cnblogs.com/pxjbk/p/11808558.html
Copyright © 2011-2022 走看看