如何检测GPS坐标是否落在MKMapView的某个区域?

时间:2013-02-01 20:31:25

标签: iphone ios objective-c mkmapview mapkit

在我的App中,我有一个圆周长的坐标数组(CLLocationCoordinate2D)。现在我从某个地方得到一个坐标,我需要检查新坐标是否落在圆圈内。 如果它,我只是想在该坐标上显示一个引脚,基本上它应该属于该区域。 我应该怎么做呢?

谢谢,

1 个答案:

答案 0 :(得分:4)

你没有说你的坐标数组是否只是纬度和经度,CLLocationCoordinate2D结构或CLLocation个对象,但如果你创建了一个CLLocation对象(如果你不是)已经有了一个),然后你可以拨打distanceFromLocation来查看它离另一个地方有多远。我假设,除了周边的坐标数组,你还有中心的坐标?

如果您有CLLocationCoordinate2D,则可以这样做:

CLLocation *location = [[CLLocation alloc] initWithLatitude:coordinate.latitude
                                                  longitude:coordinate.longitude];

CLLocation *centerLocation = [[CLLocation alloc] initWithLatitude:centerCoordinate.latitude
                                                        longitude:centerCoordinate.longitude];

CLLocationDistance distance = [location distanceFromLocation:centerLocation];

离线与您聊天,听起来地图上的坐标数组是用户手势的结果(这解释了为什么您没有坐标圆的中心)。

鉴于这种情况,我建议使用Quartz方法来测试视图中是否包含CGPoint,而不是使用映射方法来确定区域是否包含坐标在封闭的UIBezierPath内,我们将根据用户的手势构建。

因此:

  • 当用户在屏幕上拖动手指时构建UIBezierPath;

  • 完成后,将生成的路径与相关坐标进行比较。例如,地图视图显示用户位置,您可以查看地图的userLocation属性,使用地图视图{{1将CLLocationCoordinate2D的坐标转换为视图中的坐标方法)。

  • 在地图视图中使用convertCoordinate:toPointToView作为用户的当前位置,我们现在可以使用CGPoint实例方法UIBezierPath来测试该点是否在bezier路径。

因此,这可能看起来像:

containsPoint