2012-05-16 60 views
2

我希望我的應用程序知道用戶是否在特定區域內。我一直在學習地理柵欄,但我不希望設備經常檢查它是否進入或離開某個區域,我只是想知道它是否在那個具體時刻。此外,我讀過地理圍欄(看起來)準確度較低,我需要的不僅僅是蜂窩塔的精確度。
所以我們的想法是使用「標準」類型的位置來做到這一點,但我不知道如何在給定新的當前位置的情況下檢查它是否位於(圓形,矩形,多邊形?)區域內。
它可能必須使用純數學來完成,檢查高度是否在2個參數之間,以及經度如何?有一種更簡單的方法嗎?如何檢測當前位置是否位於CoreLocation的區域內

謝謝!

回答

1
+1

好吧,這將工作的圓形區域。如果我想定義一個多邊形區域怎麼辦?基本上,檢查設備是通過路徑循環還是在設備外(例如考慮10米寬的路徑)。感謝回覆! – David

+1

iOS中沒有內置的東西來確定點是否在多邊形內。您可以使用具有緯度/經度座標的基本「點聚」算法,但由於地理投影的工作方式,它們在較大尺度上不可靠。我從來沒有使用它,但ShapeKit http://github.com/mweisman/ShapeKit看起來可能會做你需要的。 –

+0

我想我會用'distanceFromLocation'和幾個if&else來做,所以我可以檢測到十字路口。爲了我的目的,它應該可以正常工作。無論如何,感謝您的幫助! :) – David

0

這裏是我的約旦曲線定理SWIFT CODE。只需提供一個CLLocationCoordinate2D的數組,它可以製作正方形,多邊形,任何真正的東西。

更深入的答案,我翻譯這個來自: How can I determine whether a 2D Point is within a Polygon?

原網站:PNPOLY - Point Inclusion in Polygon Test W. Randolph Franklin (WRF)

func liesInsideRegion(region:[CLLocationCoordinate2D]) -> Bool { 

    var liesInside = false 
    var i = 0 
    var j = region.count-1 

    while i < region.count { 

     guard let iCoordinate = region[safe:i] else {break} 
     guard let jCoordinate = region[safe:j] else {break} 

     if (iCoordinate.latitude > self.latitude) != (jCoordinate.latitude > self.latitude) { 
      if self.longitude < (iCoordinate.longitude - jCoordinate.longitude) * (self.latitude - iCoordinate.latitude)/(jCoordinate.latitude-iCoordinate.latitude) + iCoordinate.longitude { 
       liesInside = !liesInside 
      } 
     } 

     i += 1 
     j = i+1 
    } 

    return liesInside 
} 
相關問題