我有一个在地图视图上绘制 mkannotations 的应用程序(我希望我的术语正确......它有点令人困惑)。
当您点击它们时,我已经包含了字幕。
我一直在网上寻找一种将距离包含在这些标注中的方法,但我还没有完全做到。我遇到了两个部分解决方案,我想知道它们是否应该结合起来。
首先,我没有将 CoreLocation 添加到我的项目中,我需要它吗?不断更新我的用户位置并能够计算到每个点的距离?或者 Mapkit 是否以某种方式包含我可以使用的用户位置数据?
部分解决方案 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 重新计算距离。虽然,我确实想知道它的有效性。一旦你知道某物有多远,你就很少希望被不断地提醒它有多远。
- 部分解决方案 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 错误。
我觉得解决方案就在我的舌尖。只需要一点额外的推动:)
多谢你们