Obtenir l'adresse de l'emplacement de l'utilisateur actuel
J'ai suivi un tutoriel et le mélange de mon affreux code. Maintenant, je peux obtenir ma position actuelle. Et quand je tape sur un bouton, il va déclencher un code pin qui se trouve sur ma position actuelle. Si je tape sur la broche, le message indique l'adresse de mon actuel.
J'ai deux question:
- Pourquoi je ne peux pas obtenir une mesure plus précise de l'adresse? Maintenant je reçois adresse auprès de pays, de ville et de district, mais sans le nom de la route.
- Comment puis-je obtenir le "texte" de l'adresse de l'emplacement actuel? Je veux afficher l'adresse dans un UILabel ailleurs, mais ne sais pas comment faire.
Merci beaucoup!
voici la .h
#import <UIKit/UIKit.h>
#import "MapKit/MapKit.h"
#import "CoreLocation/CoreLocation.h"
@interface UserLocationAddressViewController : UIViewController <MKMapViewDelegate,MKReverseGeocoderDelegate>
{
MKMapView *userLocationAddMapView;
CLLocationManager *locationManager;
}
@property (nonatomic, retain) MKMapView *userLocationAddMapView;
-(IBAction)getUserLocationAddress:(id)sender;
@end
Et Voici .m
#import "UserLocationAddressViewController.h"
@implementation UserLocationAddressViewController
@synthesize userLocationAddMapView;
-(IBAction)getUserLocationAddress:(id)sender
{
MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:locationManager.location.coordinate];
geoCoder.delegate = self;
[geoCoder start];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
//Custom initialization
}
return self;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(void)dealloc
{
[userLocationAddMapView release];
[super dealloc];
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
self.userLocationAddMapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
userLocationAddMapView.showsUserLocation = YES;
userLocationAddMapView.delegate = self;
self.userLocationAddMapView.mapType = MKMapTypeStandard;
locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
CLLocationCoordinate2D coordinate = locationManager.location.coordinate;
MKCoordinateRegion mapRegion;
mapRegion.center = coordinate;
MKCoordinateSpan mapSpan;
mapSpan.latitudeDelta = 0.006;
mapSpan.longitudeDelta = 0.006;
mapRegion.span = mapSpan;
[userLocationAddMapView setRegion:mapRegion animated:YES];
self.userLocationAddMapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.userLocationAddMapView];
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Get Add" style:UIBarButtonItemStylePlain target:self action:@selector(getUserLocationAddress:)] autorelease];
}
-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
NSLog(@"placemark %f %f", placemark.coordinate.latitude, placemark.coordinate.longitude);
NSLog(@"addressDictionary %@", placemark.addressDictionary);
[userLocationAddMapView addAnnotations:[NSArray arrayWithObjects:placemark, nil]];
[geocoder release];
}
-(void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error
{
NSLog(@"reverseGeocoder fail");
[geocoder release];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
//Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
OriginalL'auteur lavitanien | 2011-10-21
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas vraiment utiliser MKReverseGeocoder comme il a été amorti par apple dans iOS5, vous devriez vraiment utiliser CLGeocoder. L'exemple suivant sera de retour ensemble tonne d'informations qui est basé dans le NSArray *repères, vous pouvez alors parcourir et appeler les touches dans l'assoc tableau.
OriginalL'auteur bagwaa
Il suffit de placer ce délégué méthodes, j'espère que cela peut vous aider.
MK_CLASS_DEPRECATED(NA, NA, 3_0, 5_0)
OriginalL'auteur Nilesh Kikani
J'ai eu le même problème, MKReverseGeocoder n'est pas toujours le retour de l'adresse complète, dans la mesure où, parfois, les coordonnées n'est pas assez précise et le service ne peut pas générer une approximation de l'adresse.
Afin d'obtenir de meilleurs résultats que j'ai mis en place une autre géocodage inversé à l'encontre de yahoo. Donc en gros si MKReverseGeocoder (google) ne retourne pas une adresse complète, j'ai une requête yahoo qui peut générer une approximation de la.
D'autre part attention avec MKReverseGeocoder il a été abandonné dans IOS 5, ils vous invitons à utiliser CLGeocoder au lieu
OriginalL'auteur M to the K