需要有关MKMapItem的帮助

时间:2012-12-25 05:43:46

标签: ios mkmapitem

我正在使用此代码获取当前位置,希望使用此信息进行共享,例如whatsapp。在共享位置按钮上点击我想向其他用户发送经度和纬度。但它显示出完全不同的位置

CLLocationManager *lm = [[CLLocationManager alloc] init];
    lm.delegate = self;
    lm.desiredAccuracy = kCLLocationAccuracyBest;
    lm.distanceFilter = kCLDistanceFilterNone;
    [lm startUpdatingLocation];

    CLLocation *location = [lm location];

    CLLocationCoordinate2D coord = [location coordinate] ;

    Class mapItemClass = [MKMapItem class];
    if (mapItemClass && [mapItemClass respondsToSelector:@selector(openMapsWithItems:launchOptions:)])
    {
        // Create an MKMapItem to pass to the Maps app
        CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(coord.longitude, coord.latitude);
        MKPlacemark *placemark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
        MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:placemark];
        [mapItem setName:@"My Place"];
        // Pass the map item to the Maps app
        [mapItem openInMapsWithLaunchOptions:nil];
    }

是否有可能像whatsapp显示附近的街道或地名以分享。

1 个答案:

答案 0 :(得分:0)

您可以使用 CLLocationManagerDelegate 更新位置,并将其存储在全局变量中。

将locationManager初始化为

 _locationManager = [[CLLocationManager alloc] init];
     _locationManager.delegate = _locationObjVC;
     locationManager.desiredAccuracy = kCLLocationAccuracyBest;

 [_locationManager startUpdatingLocation]; // start updating it..

//处理delgate

-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
 CLLocation *location = [[CLLocation alloc] initWithLatitude:_userAnnotationPoint.coordinate.latitude longitude:_userAnnotationPoint.coordinate.longitude];
    [_geocoder reverseGeocodeLocation:location completionHandler:
     ^(NSArray *placemarks, NSError *error)
     {
         NSLog(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");
         if (error){
             NSLog(@"Geocode failed with error: %@", error);
             //[self displayError:error];
             _userAnnotationPoint.subtitle = [NSString stringWithFormat:@"Lati:%f Long:%f",_userAnnotationPoint.coordinate.latitude,_userAnnotationPoint.coordinate.longitude];
         }
         else
         {
             CLPlacemark *placemark = [placemarks objectAtIndex:0];

             NSLog(@"Received placemarks: %@", [NSString stringWithFormat:@"%@",[[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]]);
             //            clickedAnnotationPoint.subtitle = [NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@ %@ %@",
             //            placemark.ISOcountryCode,placemark.country,placemark.postalCode,placemark.administrativeArea,          placemark.subAdministrativeArea,placemark.locality,placemark.subLocality,placemark.thoroughfare,           placemark.subThoroughfare];
             _userAnnotationPoint.subtitle = [NSString stringWithFormat:@"%@",[[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]];
         }

     }];
    }