验证坐标在某坐标区域内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+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
PHP 时间转换Unix时间戳代码
Jan 22 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
php中apc缓存使用示例
Dec 25 PHP
ThinkPHP实现一键清除缓存方法
Jun 26 PHP
php使用Jpgraph绘制简单X-Y坐标图的方法
Jun 10 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
Dec 09 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
Aug 23 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自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
详细分析JS函数去抖和节流
2017/12/05 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
python和C语言混合编程实例
2014/06/04 Python
Python实现从url中提取域名的几种方法
2014/09/26 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
使用Python的urllib2模块处理url和图片的技巧两则
2016/02/18 Python
parser.add_argument中的action使用
2020/04/20 Python
python文件编写好后如何实践
2020/07/07 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
市场总监岗位职责
2015/02/11 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
MySQL创建管理子分区
2022/04/13 MySQL