年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15064|回复: 11

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

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 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视图如下所示:
    iOS-模拟器屏幕快照“2014年11月17日-下午12.14.00”.jpg

    8、关键代码:
    [Objective-C] 纯文本查看 复制代码
    //
    //  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
    {
        [super viewDidLoad];
    }
    
    #pragma mark geoCode的Get方法,实现延时加载
    - (BMKGeoCodeSearch *)geoCode
    {
        if (!_geoCode) {
            _geoCode = [[BMKGeoCodeSearch alloc] init];
            _geoCode.delegate = self;
        }
        return _geoCode;
    }
    
    #pragma mark 点击空白处隐藏键盘
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self.view endEditing:YES];
    }
    
    #pragma mark 获取地理位置按钮事件
    - (IBAction)outputAdd
    {
        // 初始化反地址编码选项(数据模型)
        BMKReverseGeoCodeOption *option = [[BMKReverseGeoCodeOption alloc] init];
        // 将TextField中的数据传到反地址编码模型
        option.reverseGeoPoint = CLLocationCoordinate2DMake([self.latitude.text floatValue], [self.longitude.text floatValue]);
        NSLog(@"%f - %f", option.reverseGeoPoint.latitude, option.reverseGeoPoint.longitude);
        // 调用反地址编码方法,让其在代理方法中输出
        [self.geoCode reverseGeoCode:option];
    }
    
    #pragma mark 获取经纬度按钮事件
    - (IBAction)outputLocation
    {
        // 初始化地址编码选项(数据模型)
        BMKGeoCodeSearchOption *option = [[BMKGeoCodeSearchOption alloc] init];
        // 将TextField中的数据传到地址编码模型
        option.address = self.inputAddress.text;
        NSLog(@"%@", option.address);
        // 调用地址编码方法,让其在代理方法中输出
        [self.geoCode geoCode:option];
    }
    
    #pragma mark 代理方法返回反地理编码结果
    - (void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
    {
        if (result) {
            self.address.text = [NSString stringWithFormat:@"%@", result.address];
            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 = [NSString stringWithFormat:@"经度为:%.2f   纬度为:%.2f", result.location.longitude, result.location.latitude];
            NSLog(@"%@", result.address);
        }else{
            self.location.text = @"找不到相对应的位置";
        }
    }
    @end

    9、Demo下载:
    游客,如果您要查看本帖隐藏内容请回复

    该用户从未签到

    发表于 2015-3-3 14:26:27 | 显示全部楼层
    看看快快快快快快快快快

    该用户从未签到

    发表于 2015-3-14 16:24:54 | 显示全部楼层
    找了很久才找到的。

    该用户从未签到

    发表于 2015-5-27 22:23:41 | 显示全部楼层
    下过来学习,支持楼主:D
  • TA的每日心情
    开心
    2015-6-27 15:02
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-6-27 17:02:06 | 显示全部楼层
    我要用谢谢

    该用户从未签到

    发表于 2015-7-31 16:15:32 | 显示全部楼层
    12345qervbzfdvb

    该用户从未签到

    发表于 2015-8-27 17:57:39 | 显示全部楼层
    找了好久  应该是自己需要的吧

    该用户从未签到

    发表于 2015-11-30 13:25:02 | 显示全部楼层
    找了好久了,谢谢

    该用户从未签到

    发表于 2015-11-30 16:47:29 | 显示全部楼层
    看看学习学习

    该用户从未签到

    发表于 2015-12-13 20:11:56 | 显示全部楼层
    谢谢,,一直在找这个东西,,,
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-11-23 05:13 , Processed in 0.057828 second(s), 25 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表