2016-07-22 55 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