40 votes

iOS - MKMapView place l'annotation en utilisant l'adresse au lieu de lat / long

Je suis en mesure de placer des annotations sur mes MKMapView en utilisant la latitude et la longitude, cependant, mon flux entrant pour lequel j'ai besoin d'utiliser l'emplacement utilise des adresses de rue au lieu de la latitude et de la longitude. par exemple 1234 ouest 1234 est, San Francisco, CA ...

Cela aurait-il un rapport avec la CLLocationManager ?

Quelqu'un a-t-il déjà tenté l'expérience ?

76voto

Romes Points 1104

Sur la base de psoft J'ai pu obtenir ce que je cherchais avec ce code.

NSString *location = @"some address, state, and zip";
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
            [geocoder geocodeAddressString:location 
                 completionHandler:^(NSArray* placemarks, NSError* error){
                     if (placemarks && placemarks.count > 0) {
                         CLPlacemark *topResult = [placemarks objectAtIndex:0];
                         MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];

                         MKCoordinateRegion region = self.mapView.region;
                         region.center = placemark.region.center;
                         region.span.longitudeDelta /= 8.0;
                         region.span.latitudeDelta /= 8.0;

                         [self.mapView setRegion:region animated:YES];
                         [self.mapView addAnnotation:placemark];
                     }
                 }
             ];

16voto

NatashaTheRobot Points 682

Version Swift remaniée :

let location = "some address, state, and zip"
let geocoder = CLGeocoder()
geocoder.geocodeAddressString(location) { [weak self] placemarks, error in
    if let placemark = placemarks?.first, let location = placemark.location {
        let mark = MKPlacemark(placemark: placemark)

        if var region = self?.mapView.region {
            region.center = location.coordinate
            region.span.longitudeDelta /= 8.0
            region.span.latitudeDelta /= 8.0
            self?.mapView.setRegion(region, animated: true)
            self?.mapView.addAnnotation(mark)
        }
    }
}

11voto

QED Points 5350

Ce que vous recherchez s'appelle géocodage o géocodage avant . Géocodage inversé est le processus de conversion d'une paire lat/long en adresse de rue.

L'iOS5 fournit l'option CLGeocoder pour le géocodage. MKPlacemark supporte le reverse-goecoding dans iOS >= 3.0. Les données impliquées sont bien sûr très volumineuses, et votre application aura donc généralement besoin d'un accès réseau pour bénéficier de cette fonctionnalité.

Un bon point de départ est le site d'Apple Guide de programmation de la sensibilisation à la localisation . De plus, il y a BEAUCOUP de questions à ce sujet sur SO. https://stackoverflow.com/search?q=geocoding

Bonne chance !

10voto

Deepak Thakur Points 850

Version Swift

        let location = self.txtLocation.text;
        let geocoder:CLGeocoder = CLGeocoder();
        geocoder.geocodeAddressString(location!) { (placemarks: [CLPlacemark]?, error: NSError?) -> Void in
            if placemarks?.count > 0 {
                let topResult:CLPlacemark = placemarks![0];
                let placemark: MKPlacemark = MKPlacemark(placemark: topResult);

                var region: MKCoordinateRegion = self.mkMapView.region;
                region.center = (placemark.location?.coordinate)!;
                region.span.longitudeDelta /= 8.0;
                region.span.latitudeDelta /= 8.0;
                self.mkMapView.setRegion(region, animated: true);
                self.mkMapView.addAnnotation(placemark);

            }
        }

7voto

EEduard Points 68

Depuis iOS 7, placemark.region.center est obsolète. Il faut maintenant utiliser :

region.center = [(CLCircularRegion *)placemark.region center];

Vous pouvez également consulter la documentation d'Apple à ce sujet et aquí aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X