2016-07-22 62 views
2

因此,我正在研究一個項目,其中包括許多用於在地圖周圍放置註釋的用途。註釋,(這是一個更大的圓形範圍內的自定義圖像)出現在屏幕上,並且理想地,我想爲用戶爲:如何檢測用戶是否在註釋的範圍

  1. 通知的,如果他們是一個註釋 的範圍內和
  2. 不得放置另一個註解另一個的範圍內,如果圓針重疊,比方說,超過25%

我覺得這是一個非常獨特的問題,應該是有人樂趣幫助,讓玩得開心!謝謝大家!

+1

作爲一般的指針每端有兩個點(您剛剛創建的和用戶的位置),看看up GeoFencing – LuigiPower

+1

或者更具體地說,使用MapKit,查看[Monitoring Geographical Regions](https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html#//apple_ref/doc/uid/TP40009497-CH9-SW2)。_注意,我相信可以同時監視的區域數量有限,但這是一種可行的方法。但正如其他人所討論的那樣,正確的解決方案可能只是使用'CLLocation'的'distanceFromLocation'方法。 – Rob

+0

感謝@Rob鳴叫我現在就來看看這個! – Ethan

回答

4

可以從每個註釋使用

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location 

該方法測量通過追蹤 下面地球的曲率它們之間的線的兩個位置之間的距離檢查距離。產生的弧線是平滑的曲線,並且不考慮兩個位置之間的特定高度變化。

欲瞭解更多詳情,請參閱Link

+0

@ user154248更新 – AtWork

+0

嗯,這可能工作。問題是所有的註釋座標都將來自服務器。這意味着將不會有第二組座標來測量距離。我想知道這是否可以適應某種掃描儀來檢查屏幕內的註釋。 – Ethan

+0

您可以繪製一個圓圈,並在您想要設置的範圍內初始標記其中心點,然後每次從服務器獲取新的位置對象時,都會使用中心位置對象和服務器位置對象以上述方法傳遞它。 _ ** CLLocationDistance distance = [centerInitialLocation distanceFromLocation:serverLocation]; ** _ – AtWork

1

試試這個:

let location = CLLocation(latitude: 1, longitude: 1)//Or user's location 
let distance = location.distance(from: anotherLocation) 

編輯:

正如在評論中提到,你想創建一個等距點。我建議手動做到這一點:

從用戶的位置減去註釋的位置。然後將距離添加回原來的距離。例如:

用戶的位置=(1,1)

該註釋的位置=(3,2)

垂直差異將是2

水平差將是1

Then:

(3 + 2,2 + 1)

您的結果:(5,3)

現在,你將在一箇中心點(原註釋)

+0

我認爲位置和距離必須是var的,我不知道是否可以設置距離等於位置座標內的註釋加上具有特定可重用標識符的容差?也許? – Ethan

+0

你不需要他們成爲變數。每次更新位置(locationDidUpdate方法)時都會調用它。我根據新的觀點編輯了我的問題。 – penatheboss