美文网首页
iOS定位(LBS)

iOS定位(LBS)

作者: 丶若若 | 来源:发表于2016-12-23 20:41 被阅读216次

    CoreLocation 地理定位

    1.创建定位管理者

    CLLocationManager *mgr = [[CLLocationManager  alloc]init];

    2.设置代理

    mgr =  self;

    3.开始定位

    [mgr startUpdatingLocation];

    4.计算两个地理位置之间的距离

    CLLocation *location1 = [[CLLocation alloc]initWithLatitude:20.20 longitude:111.230];

    CLLocation *location2 = [[CLLocation alloc]initWithLatitude:66.20 longitude:222.230];

    CLLocationDistance distance = [location1 distanceFormLocation:location2];

    NSLog(@"两个地理位置之间的距离%f",distance);

    定位的代理方法

    -(void)locationmanager:(CLLocationmanager*)manager didupdateLocations:(NSArray *)locations{

    NSLog(@"定位到用户的位置,如果不停止会一直定位");

    //获取用户位置的对象

    CLLocation *location = [locations lastObject];

    CLLocationCoordinate2D coordinate = location.coordinate;

    NSLog(@"纬度:%f  经度:%f",coordinate.latitude,coordinate.longitude);

    [manager stopUpdatingLocation];

    // 1.取出用户输入的地址

    NSString *address = self.addressFIeld.text;

    if (address.length == 0) {

    NSLog(@"输入地址不能为空");

    return;

    }

    地理编码geocode

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    [geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {

    // 1.如果解析有错误,或者解析出的数组个数为0.直接返回

    if (placemarks.count == 0 || error) return;

    // 2.便利所有的地标对象(如果是实际开发,可以给用户以列表的形式展示)

    for (CLPlacemark *pm in placemarks) {

    // 2.1.取出用户的位置信息

    CLLocation *location = pm.location;

    // 2.2.取出用户的经纬度

    CLLocationCoordinate2D coordinate = location.coordinate;

    // 2.3.将信息设置到界面上

    self.latitudeLabel.text = [NSString stringWithFormat:@"%.2f", coordinate.latitude];

    self.longitudeLabel.text = [NSString stringWithFormat:@"%.2f",coordinate.longitude];

    self.resultLabel.text = pm.name;

    }

    }];

    反地理编码rervsecode

    // 1.取出输入的经纬度

    NSString *latitude = self.latitudeField.text;

    NSString *longitude = self.longitudeField.text;

    if (latitude.length == 0 || longitude.length == 0) {

    return;

    }

    // 2.反地理编码

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];

    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude.floatValue longitude:longitude.floatValue];

    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {

    // 如果有错误,或者解析出来的地址数量为0

    if (placemarks.count == 0 || error) return ;

    // 取出地标,就可以取出地址信息,以及CLLocation对象

    CLPlacemark *pm = [placemarks firstObject];

    #warning 注意:如果是取出城市的话,需要判断locality属性是否有值(直辖市时,该属性为空)

    if (pm.locality) {

    self.resultLabel.text = pm.locality;

    } else {

    self.resultLabel.text = pm.administrativeArea;

    }

    }];

    相关文章

      网友评论

          本文标题:iOS定位(LBS)

          本文链接:https://www.haomeiwen.com/subject/etuodttx.html