9

上部にMKMapViewUISearchBarあり、ユーザーがアドレスを入力して、そのアドレスを見つけてピンをドロップできるようにしたいと考えています。私が知らないのは、住所の文字列を経度と緯度に変換する方法です。これにより、CLLocationオブジェクトを作成できます。誰も私がこれを行う方法を知っていますか?

4

4 に答える 4

18

この質問で答えが見つかるかもしれません。

iOS - MKMapView は、lat / long By User Romes の代わりに住所を使用して注釈を配置します。

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];
                 }
             }
         ];

非常に簡単な解決策。ただし、iOS5.1 以降にのみ適用されます。

于 2014-08-01T10:10:31.607 に答える
3

Vijay と同様のアプローチを使用しましたが、1 行のコードを調整する必要がありました。region.center = placemark.region.center私にはうまくいきませんでした。多分私のコードも誰かを助けるでしょう:

let location: String = "1 Infinite Loop, CA, USA"
let geocoder: CLGeocoder = CLGeocoder()
geocoder.geocodeAddressString(location,completionHandler: {(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.mapView.region

        region.center.latitude = (placemark.location?.coordinate.latitude)!
        region.center.longitude = (placemark.location?.coordinate.longitude)!

        region.span = MKCoordinateSpanMake(0.5, 0.5)

        self.mapView.setRegion(region, animated: true)
        self.mapView.addAnnotation(placemark)
    }
}) 
于 2016-03-12T20:59:02.180 に答える
1

Swift2の場合

var location: String = "some address, state, and zip"
        var geocoder: CLGeocoder = CLGeocoder()
        geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in
            if (placemarks?.count > 0) {
                var topResult: CLPlacemark = (placemarks?[0])!
                var placemark: MKPlacemark = MKPlacemark(placemark: topResult)
                var region: MKCoordinateRegion = self.mapView.region
                region.center = placemark.region.center
                region.span.longitudeDelta /= 8.0
                region.span.latitudeDelta /= 8.0
                self.mapView.setRegion(region, animated: true)
                self.mapView.addAnnotation(placemark)
            }
        })
于 2015-12-16T05:26:52.363 に答える