Sian 发表于 2014-11-17 12:16:32

百度地图使用第三讲:地理编码与反地址编码

本帖最后由 Sian 于 2015-5-29 09:08 编辑

1、地理编码指的是将地址位置(中文地址)转换成经纬度,反地址编码指的是将经纬度转换成地址位置;

2、在百度地图中需要用到三个关键性的类:BMKGeoCodeSearch、BMKGeoCodeSearchOption、BMKReverseGeoCodeOption;

3、BMKGeoCodeSearch:地理编码主类,用来查询、返回结果信息(地址位置或经纬度);

4、BMKGeoCodeSearchOption:地理编码选项,即地理编码的数据模型,地址是通过该类传递进去的;

5、BMKReverseGeoCodeOption:反地理编码选项,即反地理编码的数据模型,经纬度就是通过该类传递进去的;

6、有了以上基本信息,开始做一个简单的示例:从手机页面上输入经纬度通过按钮事件将对应的地理位置输出到手机屏幕,反之亦然;

7、基本UI视图如下所示:


8、关键代码:
//
//SAViewController.m
//MapDemo
//
//Created by Sian on 14/11/13.
//Copyright (c) 2014年 Sian. All rights reserved.
//

#import "SAViewController.h"
#import "BMapKit.h"

@interface SAViewController () <BMKGeoCodeSearchDelegate>

@property (nonatomic, strong) BMKGeoCodeSearch *geoCode;      // 地理编码

@property (weak, nonatomic) IBOutlet UITextField *longitude;    // 经度输入
@property (weak, nonatomic) IBOutlet UITextField *latitude;   // 纬度输入
@property (weak, nonatomic) IBOutlet UILabel *address;          // 位置输出

@property (weak, nonatomic) IBOutlet UITextField *inputAddress; // 地址输入
@property (weak, nonatomic) IBOutlet UILabel *location;         // 经纬输出

// 地址输出事件
- (IBAction)outputAdd;
// 经纬度输出事件
- (IBAction)outputLocation;
@end

@implementation SAViewController

- (void)viewDidLoad
{
    ;
}

#pragma mark geoCode的Get方法,实现延时加载
- (BMKGeoCodeSearch *)geoCode
{
    if (!_geoCode) {
      _geoCode = [ init];
      _geoCode.delegate = self;
    }
    return _geoCode;
}

#pragma mark 点击空白处隐藏键盘
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    ;
}

#pragma mark 获取地理位置按钮事件
- (IBAction)outputAdd
{
    // 初始化反地址编码选项(数据模型)
    BMKReverseGeoCodeOption *option = [ init];
    // 将TextField中的数据传到反地址编码模型
    option.reverseGeoPoint = CLLocationCoordinate2DMake(, );
    NSLog(@"%f - %f", option.reverseGeoPoint.latitude, option.reverseGeoPoint.longitude);
    // 调用反地址编码方法,让其在代理方法中输出
    ;
}

#pragma mark 获取经纬度按钮事件
- (IBAction)outputLocation
{
    // 初始化地址编码选项(数据模型)
    BMKGeoCodeSearchOption *option = [ init];
    // 将TextField中的数据传到地址编码模型
    option.address = self.inputAddress.text;
    NSLog(@"%@", option.address);
    // 调用地址编码方法,让其在代理方法中输出
    ;
}

#pragma mark 代理方法返回反地理编码结果
- (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
    if (result) {
      self.address.text = ;
      NSLog(@"%@ - %@", result.address, result.addressDetail.streetNumber);
    }else{
      self.address.text = @"找不到相对应的位置信息";
    }
}

#pragma mark 代理方法返回地理编码结果
- (void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
    if (result) {
      self.location.text = ;
      NSLog(@"%@", result.address);
    }else{
      self.location.text = @"找不到相对应的位置";
    }
}
@end
9、Demo下载:**** Hidden Message *****

2209696137 发表于 2015-3-3 14:26:27

看看快快快快快快快快快

yanglixin 发表于 2015-3-14 16:24:54

找了很久才找到的。

asd82224f 发表于 2015-5-27 22:23:41

下过来学习,支持楼主:D

807430596 发表于 2015-6-27 17:02:06

我要用谢谢

Wincone_yang 发表于 2015-7-31 16:15:32

12345qervbzfdvb

kekeke 发表于 2015-8-27 17:57:39

找了好久应该是自己需要的吧

lht898000 发表于 2015-11-30 13:25:02

找了好久了,谢谢

kakadekafuka 发表于 2015-11-30 16:47:29

看看学习学习

豆丁00544 发表于 2015-12-13 20:11:56

谢谢,,一直在找这个东西,,,
页: [1] 2
查看完整版本: 百度地图使用第三讲:地理编码与反地址编码