php教程

超轻量级php框架startmvc

验证坐标在某坐标区域内php代码

更新时间:2020-03-11 19:56:59 作者:startmvc
之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进

之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内。

以下是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某片坐标区域内验证