0

我有一个在地图视图上绘制 mkannotations 的应用程序(我希望我的术语正确......它有点令人困惑)。

当您点击它们时,我已经包含了字幕。

我一直在网上寻找一种将距离包含在这些标注中的方法,但我还没有完全做到。我遇到了两个部分解决方案,我想知道它们是否应该结合起来。

  1. 首先,我没有将 CoreLocation 添加到我的项目中,我需要它吗?不断更新我的用户位置并能够计算到每个点的距离?或者 Mapkit 是否以某种方式包含我可以使用的用户位置数据?

  2. 部分解决方案 A 使用以下代码:

`-(void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

       fromLocation:(CLLocation *)oldLocation {

if(!newLocation) return;

if ((oldLocation.coordinate.latitude != newLocation.coordinate.latitude) &&

    (oldLocation.coordinate.longitude != newLocation.coordinate.longitude)){

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

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

    CLLocationDistance distance = ([loc2 distanceFromLocation:loc1]) * 0.000621371192;

    //distance = distance;

    NSLog(@"Total Distance %f in miles",distance);

}   

}

我了解此方法计算 2 点之间的距离。我会以某种方式需要循环浏览我的注释并创建距离。看起来这会更有用,因为它会不断地根据当前的 userLocation 重新计算距离。虽然,我确实想知道它的有效性。一旦你知道某物有多远,你就很少希望被不断地提醒它有多远。

  1. 部分解决方案 B 使用此代码:

`- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control{

CLLocation *pinLocation = [[[CLLocation alloc] initWithLatitude:[(MyAnnotation*)[view annotation] coordinate].latitude longitude:[(MyAnnotation*)[view annotation] coordinate].longitude]];

CLLocation *userLocation = [[CLLocation alloc] initWithLatitude:self._mapView.userLocation.coordinate.latitude longitude:self._mapView.userLocation.coordinate.longitude];

CLLocationDistance distance = [pinLocation distanceFromLocation:userLocation];

NSLog(@"Distance to pin %4.0f", distance);

} `

在这种情况下,只要轻敲销钉,就会计算距离。但我不清楚 MyAnnotation [查看注释] 的代码,我猜原始发帖人的位置基于 MyAnnotation 类,所以我将其更改为 MyLocation 并且除了 1 个错误之外的所有错误都消失了。出于某种原因,我在最后一个方括号的 pinLocation 行收到了 Expected Identifier 错误。

我觉得解决方案就在我的舌尖。只需要一点额外的推动:)

多谢你们

4

1 回答 1

0

只需将 calloutAccessoryControlTapped 方法中的代码移动到创建 MKAnnotation 的行之后,无论您拥有它。给 MKAnnotation 子类一个浮动距离属性并将其设置为字幕。

于 2013-01-11T22:29:02.377 回答