地理编码及反编码

2017-03-23  本文已影响51人  陈水寒

苹果自带地理编码,通过名称搜索获得相应的经纬度信息,反编码就是通过搜索经纬度获得相应的地理名称

相应代码如下

// 初始化
CLGeocoder geocoder = [[CLGeocoder alloc] init];

- (IBAction)geocode:(id)sender {
    
    NSString *address = self.addressTV.text;
    
    if ([address length] == 0) return;
    
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        if (error) {
            NSLog(@"发生错误");
            return ;
        }
        // 遍历数组
        [placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//            self.addressTV.text = obj.name;
            self.latitudeTF.text = @(obj.location.coordinate.latitude).stringValue;
            self.longitudeTF.text = @(obj.location.coordinate.longitude).stringValue;
        }];
    }];
    
}

- (IBAction)reverseGeocode:(id)sender {
    
    if ([self.latitudeTF.text length] == 0) {
        NSLog(@"请输入维度");
        return;
    }
    
    if ([self.longitudeTF.text length] == 0) {
        NSLog(@"请输入经度");
        return;
    }
    
    double latitudeD = [self.latitudeTF.text doubleValue];
    double longitudeD = [self.longitudeTF.text doubleValue];
    
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitudeD longitude:longitudeD];
    
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if (error) {
            NSLog(@"发生错误");
            return ;
        }
        // 遍历数组
        [placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            self.addressTV.text = obj.name;
//            self.latitudeTF.text = @(obj.location.coordinate.latitude).stringValue;
//            self.longitudeTF.text = @(obj.location.coordinate.longitude).stringValue;
        }];
    }];
}
编码及反编码演示效果.gif
上一篇下一篇

猜你喜欢

热点阅读