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);
    

      亲测有效

  • 相关阅读:
    SQL exists( select 1 from
    svn不知道这样的主机
    SVN 操作指南
    SVN导出/导入、SVN备份/还原 【小白版】
    Asp.net窄屏页面 手机端新闻列表
    装饰者模式
    适配器模式
    原型模式
    建造者模式
    抽象工厂方法
  • 原文地址:https://www.cnblogs.com/pxjbk/p/11808558.html
Copyright © 2011-2022 走看看