我目前使用下面的函数来确定纬度/经度是否在地球上的多边形内。
public function inPolygon($lat, $lon, $polylat, $polylon) {
$j=count($polylat)-1;
$oddNodes=false;
for($i=0;$i<count($polylat);$i++){
if($polylat[$i]<$lat && $polylat[$j]>=$lat || $polylat[$j]<$lat && $polylat[$i]>=$lat){
if($polylon[$i]+($lat-$polylat[$i])/($polylat[$j]-$polylat[$i])*($polylon[$j]-$polylon[$i])<$lon){
$oddNodes=!$oddNodes;
}
}
$j=$i;
}
return $oddNodes;
}
问题是我现在在地球上有一个多边形,从北纬-176.57延伸到173.73然后又回到西半球。我目前使用的功能显然只有当纬度/经度都在同一个半球时才有效。
如何修复此功能以适应半球的交叉?