验证坐标在某坐标区域内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
初学CAKEPHP 基础教程
Nov 02 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
PHP 的异常处理、错误的抛出及回调函数等面向对象的错误处理方法
Dec 07 PHP
php实现字符串反转输出的方法
Mar 14 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
Symfony2学习笔记之模板用法详解
Mar 17 PHP
CI框架支持$_GET的两种实现方法
May 18 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 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
Yii实现简单分页的方法
2016/04/29 PHP
js中获取事件对象的方法小结
2011/03/13 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
使用JQuery实现Ctrl+Enter提交表单的方法
2015/10/22 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
[00:11]战神迅矛
2019/03/06 DOTA
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
传播学专业毕业生自荐信
2013/11/04 职场文书
预备党员思想汇报
2014/01/08 职场文书
八年级音乐教学反思
2014/01/09 职场文书
如何撰写岗位职责
2014/02/01 职场文书
法人授权委托书格式
2014/04/08 职场文书
生产车间标语
2014/06/11 职场文书
红色电影观后感
2015/06/18 职场文书
2015中学学校工作总结
2015/07/20 职场文书
董事长年会致辞
2015/07/29 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript