如何添加MKAnnotation引脚的距离?

时间:2013-01-10 03:18:44

标签: distance mkannotation

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

我已经在你点击它们时加入了副标题。

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

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

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

  3. ` - (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. Partial Solution B使用以下代码:
    2. ` - (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错误。

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

      谢谢你们

1 个答案:

答案 0 :(得分:0)

只需将calloutAccessoryControlTapped方法中的代码移动到创建MKAnnotation的行(无论您拥有它的任何位置)之后。为MKAnnotation子类提供浮点距离属性并将其设置为副标题。