這裏是我的約旦曲線定理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
}
好吧,這將工作的圓形區域。如果我想定義一個多邊形區域怎麼辦?基本上,檢查設備是通過路徑循環還是在設備外(例如考慮10米寬的路徑)。感謝回覆! – David
iOS中沒有內置的東西來確定點是否在多邊形內。您可以使用具有緯度/經度座標的基本「點聚」算法,但由於地理投影的工作方式,它們在較大尺度上不可靠。我從來沒有使用它,但ShapeKit http://github.com/mweisman/ShapeKit看起來可能會做你需要的。 –
我想我會用'distanceFromLocation'和幾個if&else來做,所以我可以檢測到十字路口。爲了我的目的,它應該可以正常工作。無論如何,感謝您的幫助! :) – David