objective-c开发——地图定位之地理编码和地理反编码

Posted 师然的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了objective-c开发——地图定位之地理编码和地理反编码相关的知识,希望对你有一定的参考价值。

我们平时做地图定位,主要是靠经纬度来准确定位某个位置。

但是,我们是人啊,我们不是卫星啊。

用户在地图上查一个地方,我们总不能告诉他,这个地方是东经多少度,北纬多少度吧。

咱们好歹得告诉人家个地名不是?

这就是我们今天说的地理编码和地理反编码。

地理编码:你说个地名,比如“西湖”,我们给你返回它的经纬度,然后你通过查出来的这个经纬度去定位

反地理编码:我告诉你一个经纬度,你通过经度纬度返回地名。最好在插个大头针在地图上就更好了,啥叫大头针,咱们以后再说。

首先,我的界面是这个样纸的,就是两个按钮,拖线,生成两个方法

技术分享

 

源代码如下

//

//  ViewController.m

//  Demo3_反地理编码

//

//  Created by shiran on 16/3/23.

//  Copyright © 2016 shiran. All rights reserved.

//

 

#import "ViewController.h"

#import <CoreLocation/CoreLocation.h>

 

@interface ViewController ()

 

//地理编码

@property(nonatomic,strong)CLGeocoder *geocoder;

 

@end

 

@implementation ViewController

 

-(CLGeocoder *)geocoder{

 

    if (!_geocoder) {

        _geocoder=[[CLGeocoder alloc]init];

    }

    return _geocoder;

}

 

 

//地理编码

- (IBAction)geocoder:(UIButton *)sender {

    

    NSString *address=@"西湖";

    if (address.length==0) {

        return;

    }    

    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

 

        if (error==nil) {

            for (CLPlacemark *placeMark in placemarks) {

                NSLog(@"%@",placeMark.addressDictionary[@"City"]);

                NSLog(@"%f,%f",placeMark.location.coordinate.latitude,placeMark.location.coordinate.longitude);

            }

        }

        else

        {

            NSLog(@"%@",error);

        

        }

    }];

 

 

 

}

//反地理编码

- (IBAction)reverseGeocoder:(UIButton *)sender {

    

    CLLocation *loc = [[CLLocation alloc]initWithLatitude:40 longitude:116];

    

    [self.geocoder reverseGeocodeLocation:loc completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {

        

        if (error==nil) {

            for (CLPlacemark *placemark in placemarks) {

                NSLog(@"%@,%@",placemark.addressDictionary[@"City"],placemark.name);

            }

        }

    }]; 

}

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

}

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

点击 地理编码 按钮,控制台输出如下 ,因为我的模拟器是英文的,所以控制台打印也是英文的,就这么洋气^_^

看,南昌的经纬度和杭州的经纬度都出来了,看来不止杭州有个西湖,南昌也有西湖啊,长姿势吧^_^

技术分享

 

点击 反地理编码 按钮,控制台输出如下

这里,根据我的经纬度返回的地址是北京门头沟

技术分享

以上是关于objective-c开发——地图定位之地理编码和地理反编码的主要内容,如果未能解决你的问题,请参考以下文章

百度LBS地图的Web端开发实战

iOS定位和位置信息获取

同时使用地理定位和地理编码 - Javascript

IOS_地图与定位

逆向地理编码--根据地址搜索定位,点击地图获取经纬度信息

基于矢量数据的逆地理编码功能实现