- 在做有关地图的坐标计算的时候有时候会遇到判断坐标点是否在某一个区域中,这时候就用到了判断点在面上的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
function is_ptin_poly($aLon, $aLat, $pointList = array()) { $iSum = 0; $iCount = count($pointList); if ($iCount < 3) { return false; } foreach ($pointList as $key => $row) { $pLon1 = $row[0]; $pLat1 = $row[1]; if ($key === $iCount - 1) { $pLon2 = $pointList[0][0]; $pLat2 = $pointList[0][1]; } else { $pLon2 = $pointList[$key + 1][0]; $pLat2 = $pointList[$key + 1][1]; } if ((($aLat >= $pLat1) && ($aLat < $pLat2)) || (($aLat >= $pLat2) && ($aLat < $pLat1))) { if (abs($pLat1 - $pLat2) > 0) { $pLon = $pLon1 - (($pLon1 - $pLon2) * ($pLat1 - $aLat)) / ($pLat1 - $pLat2); if ($pLon < $aLon) { $iSum += 1; } } } } if ($iSum % 2 != 0) { return true; } else { return false; } }
|
- 射线法:该法中常用水平扫描线法或垂直线法来判断一点是否在区域内。假若有一疑问点P(x,y),要判斯它是否在多边形内,可从该疑问点向左引水平扫描线(即射线)。*
计算此线段与区域边界的相交次数c。如果c为奇数,认为疑问点在多边形内;为偶数,则疑问点在多边形外。