验证坐标在某坐标区域内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函数
Feb 16 PHP
php中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
PHP实现通用alert函数的方法
Mar 11 PHP
浅谈php的优缺点
Jul 14 PHP
YII Framework框架教程之缓存用法详解
Mar 14 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP支付宝当面付2.0代码
Dec 21 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
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
分享8个最佳的代码片段在线测试网站
2013/06/29 PHP
yii2.0之GridView自定义按钮和链接用法
2014/12/15 PHP
php实现复制移动文件的方法
2015/07/29 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
Python使用py2exe打包程序介绍
2014/11/20 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python处理按钮消息的实例详解
2017/07/11 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
浅析Python __name__ 是什么
2020/07/07 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
求职信写作要突出重点
2014/01/01 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
应届生自荐书
2014/06/23 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Python中itertools库的四个函数介绍
2022/04/06 Python