您可以從矩形的四個點創建路徑,然後使用CGPathContainsPoint
來檢查當前位置是否在路徑內。
至於經緯度轉換爲平面x,y座標,最簡單的方法是使用Map Kit進行墨卡託投影。查詢Understanding Map Geometry瞭解更多信息。
下面是一個例子:
// create four rectangle points from A, B
dx = (B.x - A.x) * 0.05; // 5% of the A-B length
dy = (B.y - A.y) * 0.05;
// topmost corner, above B
points[0].x = B.x + dx - dy;
points[0].y = B.y + dy + dx;
//rightmost corner, to the right from B
points[1].x = B.x + dx + dy;
points[1].y = B.y + dy - dx;
...
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, points[0].x, points[0].y);
CGPathAddLineToPoint(path, NULL, points[1].x, points[1].y);
CGPathAddLineToPoint(path, NULL, points[2].x, points[2].y);
CGPathAddLineToPoint(path, NULL, points[3].x, points[3].y);
CGPathCloseSubpath(path);
// convert latitude, longitude to planar coordinates
MKMapPoint location = MKMapPointForCoordinate([newLocation coordinate]);
BOOL inside = CGPathContainsPoint(path, NULL, CGPointMake(location.x, location.y), YES);
CGPathRelease(path);
注:此代碼預計,當前位置是一個點,而在現實中,它是一個點和準確性的半徑,這實際上是一個圓。這有點複雜,因爲現在你需要定義當前位置未知的情況下如何處理情況完全是,但你只知道它在圓圈中的某處。如果矩形很大(例如5公里),那麼您可能只需要小於50米的精度半徑,就像當前位置精確一樣進行計算,並忽略計算的小誤差。如果矩形較小(比如說50米),那麼您也可以按照當前位置精確的方式進行計算,但是假陽性概率會更高(例如,有時會在矩形中檢測到,而您會站在外面)。
或者您可能想要尋找「完美」的解決方案,並做圓形矩形交點,這是更復雜的,可能會導致不僅在YES和NO的答案,而且「在這個準確性,它不能確定你是否你在矩形的內部或外部「。
你在做這個簡單嗎?即將經緯度視爲x,y座標?或者你是否正確地做了這件事,即將緯度和長度轉換爲三維座標並計算直線的大圓? – JeremyP 2011-04-01 10:00:31
我猜測把它轉換成3D座標會讓它更好嗎?因此,如果有可能將其整合到這個想法,那麼我想看看 – aherlambang 2011-04-01 14:23:56
是的,它會更好,但我懷疑幾何圖形會非常困難。 – JeremyP 2011-04-01 15:49:03