验证坐标在某坐标区域内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查询域名状态whois的类
Nov 25 PHP
php中用加号与用array_merge合并数组的区别深入分析
Jun 03 PHP
php时区转换转换函数
Jan 07 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
你应该知道PHP浮点数知识
May 13 PHP
Symfony核心类概述
Mar 17 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
php下的原生ajax请求用法实例分析
Feb 28 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/06/17 PHP
解析thinkphp基本配置 convention.php
2013/06/18 PHP
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
微信小程序canvas实现签名功能
2021/01/19 Javascript
python将ip地址转换成整数的方法
2015/03/17 Python
Python中property属性实例解析
2018/02/10 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python tkinter label 更新方法
2018/10/11 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Python接口自动化测试的实现
2020/08/28 Python
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
医学生毕业自我鉴定
2014/03/26 职场文书
校园活动宣传方案
2014/03/28 职场文书
庆七一活动总结
2014/08/27 职场文书
财务检查整改报告
2014/11/06 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript