验证坐标在某坐标区域内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安全性问题中的:Null 字符问题
Jun 21 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 PHP
php去除字符串换行符示例分享
Feb 13 PHP
php实现的css文件背景图片下载器代码
Nov 11 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
php实现分页显示
Nov 03 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
Dec 21 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
php导入导出excel实例
2013/10/25 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
使用Apache的rewrite
2021/03/09 Servers
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js取得html iframe中的元素和变量值
2014/06/30 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
如何利用Promises编写更优雅的JavaScript代码
2016/05/17 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
简单介绍Python中的JSON使用
2015/04/28 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
python的Tqdm模块的使用
2018/01/10 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python异步存储数据详解
2019/03/19 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
物流仓储实习自我鉴定
2013/09/25 职场文书
公务员平时考核实施方案
2014/03/11 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
酒会邀请函
2015/01/31 职场文书
会计工作态度自我评价
2015/03/06 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
诚信高考倡议书
2019/06/24 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
浅谈Python中的正则表达式
2021/06/28 Python
基于Python实现射击小游戏的制作
2022/04/06 Python
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js