之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内。
以下是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 $testy) != (self::$verty[$j]>$testy) ) && ($testx $maxX) $maxX = $item['lng'];
if($item['lng'] $maxY) $maxY = $item['lat'];
if($item['lat'] $maxX || $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免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










