验证坐标在某坐标区域内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 相关文章推荐
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
php学习 函数 课件
Jun 15 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
php array_walk() 数组函数
Jul 12 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
php将access数据库转换到mysql数据库的方法
Dec 24 PHP
php+mysql实现无限级分类
Nov 11 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
Mar 12 PHP
php实现session共享的实例方法
Sep 19 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使用ICQ网关发送手机短信
2013/10/30 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
2015/03/13 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
js实现AI五子棋人机大战
2020/05/28 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
JS+JQuery实现无缝连接轮播图
2020/12/30 jQuery
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
Python使用py2exe打包程序介绍
2014/11/20 Python
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
Python控制台实现交互式环境执行
2020/06/09 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
外贸业务员求职信范文
2013/12/12 职场文书
运动会稿件200字
2014/02/07 职场文书
国培教师自我鉴定
2014/02/12 职场文书
班级寄语大全
2014/04/10 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
农村党支部承诺书
2015/04/30 职场文书
《狮子和鹿》教学反思
2016/02/16 职场文书
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL