验证坐标在某坐标区域内php代码


Posted in PHP onOctober 08, 2016

之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内。

以下是PHP代码的实现 (仅验证坐标在某片坐标区域内)

<?php
/**
 * 验证坐标点是否在某区域内
 * @author xiaoliang <1058436713@qq.com>
 * Class validationMap
 */
class validationMap{
 private static $coordArray;
 private static $vertx = [];
 private static $verty = [];
 /**
  * 设置坐标区域
  * @param mixed $coordArray
  */
 public static function setCoordArray(array $coordArray)
 {
  self::$coordArray = $coordArray;
 }
 /**
  * 验证区域范围
  * @param array $coordArray
  * @return bool
  */
 public static function isCityCenter(array $coordArray){
  if(!self::vaildatePoint($coordArray)){
   return false;
  }
  return self::pnpoly(count(self::$coordArray), $coordArray['lng'], $coordArray['lat']);
 }
 /**
  * 比较区域坐标
  * @param $nvert
  * @param $testx
  * @param $testy
  * @return bool
  */
 private static function pnpoly($nvert,$testx, $testy)
 {
  $c = false;
  for ($i = 0, $j = $nvert-1; $i < $nvert; $j = $i++) {
   if ( ( (self::$verty[$i]>$testy) != (self::$verty[$j]>$testy) ) && ($testx < (self::$vertx[$j]-self::$vertx[$i]) * ($testy-self::$verty[$i]) / (self::$verty[$j]-self::$verty[$i]) + self::$vertx[$i]) )
    $c = !$c;
  }
  return $c;
 }
 /**
  * 验证坐标
  * @param array $pointArray
  * @return bool
  */
 private static function vaildatePoint(array $pointArray){
  $maxY = $maxX = 0;
  $minY = $minX = 9999;
  foreach (self::$coordArray as $item){
   if($item['lng']>$maxX) $maxX = $item['lng'];
   if($item['lng'] < $minX) $minX = $item['lng'];
   if($item['lat']>$maxY) $maxY = $item['lat'];
   if($item['lat'] < $minY) $minY = $item['lat'];
   self::$vertx[] = $item['lng'];
   self::$verty[] = $item['lat'];
  }
  if ($pointArray['lng'] < $minX || $pointArray['lng'] > $maxX || $pointArray['lat'] < $minY || $pointArray['lat'] > $maxY) {
   return false;
  }
  return true;
 }
}
/**************************** test *************************************/
$map = [ //上海
 ["lng" => 121.488286, "lat" => 31.420147],
 ["lng" => 121.702154, "lat" => 31.294828],
 ["lng" => 121.780918, "lat" => 31.141157],
 ["lng" => 121.782068, "lat" => 30.941157],
 ["lng" => 121.492885, "lat" => 30.909931],
 ["lng" => 121.22325, "lat" => 30.890099],
 ["lng" => 121.161482, "lat" => 31.015526],
 ["lng" => 121.076395, "lat" => 31.226239],
 ["lng" => 121.189873, "lat" => 31.339688],
 ["lng" => 121.459509, "lat" => 31.41368],
];
$array = ["lat"=>31.218681,"lng"=>121.08604];//进行验证的区域
validationMap::setCoordArray($map);
var_dump(validationMap::isCityCenter($array));

在地图中的运用:

验证坐标在某坐标区域内php代码

验证坐标在某坐标区域内php代码

验证坐标在某坐标区域内php代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
十天学会php之第九天
Oct 09 PHP
消息持续发送的完整例子
Oct 09 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
基于PHP编程注意事项的小结
Apr 27 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
php格式文件打开的四种方法
Feb 24 PHP
PHP实现SMTP邮件的发送实例
Sep 27 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
layui数据表格自定义每页条数limit设置
Oct 26 PHP
浅谈php常用的7大框架的优缺点
Jul 20 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 #PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 #PHP
php文件类型MIME对照表(比较全)
Oct 07 #PHP
php中文字符串截取多种方法汇总
Oct 06 #PHP
PHP微信红包生成代码分享
Oct 06 #PHP
php下载文件超时时间的设置方法
Oct 06 #PHP
详谈php静态方法及普通方法的区别
Oct 04 #PHP
You might like
用PHP连接Oracle数据库
2006/10/09 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
javascript 动态创建表格
2015/01/08 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
Python yield使用方法示例
2013/12/04 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
Farfetch台湾官网:奢侈品牌时尚购物平台
2019/06/17 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
律师授权委托书范本
2014/10/07 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
python高温预警数据获取实例
2022/07/23 Python