验证坐标在某坐标区域内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
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
php实现的mongodb操作类
May 28 PHP
php实现的xml操作类
Jan 15 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
PHP微信支付开发实例
Jun 22 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
Laravel如何实现自动加载类
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
非常好的php目录导航文件代码
2006/10/09 PHP
PHP的单引号和双引号 字符串效率
2009/05/27 PHP
PHP 超链接 抓取实现代码
2009/06/29 PHP
PHP数组实例总结与说明
2011/08/23 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
php实现图片缩略图的方法
2016/03/29 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
Angular.JS通过指令操作DOM的方法
2017/05/10 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
深入理解Python中的*重复运算符
2017/10/28 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Python页面加载的等待方式总结
2021/02/28 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
大三在校生电子商务求职信
2013/10/29 职场文书
小组合作学习反思
2014/02/18 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
《画杨桃》教学反思
2014/04/13 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
2015重阳节座谈会主持词
2015/07/30 职场文书
Elasticsearch 索引操作和增删改查
2022/04/19 Python