验证坐标在某坐标区域内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
删除数组元素实用的PHP数组函数
Aug 18 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
PHP闭包(Closure)使用详解
May 02 PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
PHP四种基本排序算法示例
Apr 09 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
高质量PHP代码的50个实用技巧必备(上)
Jan 22 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 PHP
ThinkPHP5.0框架实现切换数据库的方法分析
Oct 30 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获取网址的顶级域名函数代码
2012/09/24 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
JavaScript File分段上传
2016/03/10 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
python连接oracle数据库实例
2014/10/17 Python
Python读写ini文件的方法
2015/05/28 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
Python实现学校管理系统
2018/01/11 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
单利模式及python实现方式详解
2018/03/20 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
小学家长会邀请函
2014/01/23 职场文书
微观物理专业自荐信
2014/01/26 职场文书
企业总经理职责
2014/02/02 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
房屋转让协议书
2014/04/11 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
创业计划书之便利店
2019/09/05 职场文书
导游词之无锡梅园
2019/11/28 职场文书
详解Python中的进程和线程
2021/06/23 Python