php 判断一个点是否在一个多边形区域内
2024-09-27 22:13:27
<?php class pointMap{
private static $coordArray;
private static $vertx = [];
private static $verty = []; public static function setArray(array $Array)
{
self::$coordArray = $Array;
} public static function isCenter(array $testarray){
if(!self::vaildatePoint($testarray)){
return false;
} return self::intra(count(self::$coordArray), $testarray['lng'], $testarray['lat']);
} private static function intra($n,$testx, $testy)
{ $c = false;
for ($i = 0, $j = $n-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;
} 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;
}
} $map = [
["lng" => 0.0, "lat" => 0.0],
["lng" => 0.0, "lat" => 1.0],
["lng" => 0.0, "lat" => 2.0],
["lng" => 1.0, "lat" => 2.0],
["lng" => 2.0, "lat" => 2.0],
["lng" => 2.0, "lat" => 1.0],
["lng" => 2.0, "lat" => 0.0],
]; $array = ["lat"=>2.0,"lng"=>6.0]; pointMap::setArray($map);
var_dump(pointMap::isCenter($array));
最新文章
- nginx服务器http重定向到https的正确写法
- Coding源码学习第四部分(Masonry介绍与使用(三))
- shell脚本,防止sshd被暴力破解
- python 类修饰器
- /WEB-INF/userManage.jsp(31,82) Unterminated ${ tag
- Android中实现消息推送(JPush)
- JSONObject和JSONArray使用
- Great writers inspire
- 【Web Service】WSDL文档
- pyqt例子搜索文本
- 给WebApp加一个“壳”,实现Andriod系统添加到桌面
- boost::asio设置同步连接超时
- Euclid Problem - PC110703
- eureka服务搭建
- XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Khamovniki
- 不常用但是很实用的css记录
- Linux管理用户和组
- 教你如何自学UI设计
- FileChannel类的理解和使用
- php 在函数前面加个@的作用
热门文章
- 腾讯云服务器CVM购买详细过程 选择我们需要的腾讯云服务器
- ASP.NET MVC 长连接(服务器推)完整实现
- GridView的 PreRender事件与范例--GridView + CheckBox,点选多列资料(复选删除)
- ffmeg过滤器介绍[转]
- echarts 相关属性介绍
- 2018.5.18 AndroidStudio创建项目出错
- datetime 插件
- 拷贝时间测试=cudamelloc+cudahostalloc
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第五节
- 梁勇(Danniel Liang) java教材例题:java程序购买额按税率求营业税 java中数值保留2位小数的方法