验证坐标在某坐标区域内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 数组的创建、调用和更新实现代码
Mar 09 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
PHP之短标签开启设置
Jun 17 PHP
php 读取文件头判断文件类型的实现代码
Aug 05 PHP
php的hash算法介绍
Feb 13 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
PHP使用trim函数去除字符串左右空格及特殊字符实例
Jan 07 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
Yii2框架加载css和js文件的方法分析
May 25 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
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
关于javascript DOM事件模型的两件事
2010/07/22 Javascript
使用js Math.random()函数生成n到m间的随机数字
2014/10/09 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
[05:29]2014DOTA2国际邀请赛 赛后专访:LGDNewbee顺利过关
2014/07/13 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Python实现网络端口转发和重定向的方法
2016/09/19 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
美国网上花店:JustFlowers
2017/02/12 全球购物
英语自荐信范文
2013/12/11 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
感恩教育月活动总结
2014/07/07 职场文书
人力资源职位说明书
2014/07/29 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
2015元旦晚会主持词(开场白+结束语)
2014/12/14 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
CSS 伪元素::marker详解
2021/06/26 HTML / CSS
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android