iOS开发之高德地图

本文介绍了如何在iOS应用中集成高德地图,包括使用Apple自带的地图服务,通过地名和坐标进行定位,以及显示地图、添加自定义大头针并响应点击事件。同时,文章详细讲解了自定义大头针的实现过程,包括创建KCAnnotation和KCCalloutAnnotationView,以及弹出大头针的自适应布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.使用Apple自带的高德地图
2.通过地名定位转换出坐标,通过坐标定位出详细信息
3.定位,显示地图,地图添加大头针,自定义大头针

1.使用Apple自带的高德地图
1.)需引入两个头文件:
(1). CoreLocation/CoreLocation.h用于定位
(2). MapKit/MapKit.h用于显示地图

#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>

2)定义一个高德地图属性

@interface MapOfAppleViewController ()

@property (nonatomic, strong) CLGeocoder *geocoder;

@end

3)viewDidLoad方法

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.view.backgroundColor = [UIColor whiteColor];
    /**
     初始化高德地图
     */
    self.geocoder = [[CLGeocoder alloc]init];
    /* 下面会详述该方法 */
    //[self location];
    [self listPlacemark];
}

4)location方法(此方法只有定位,没有重定位)

- (void)location
{
    /**
     *  根据"XXX"进行地理编码
     *
     *  @param placemarks block
     *  @param error      nil
     *
     *  @return void
     */
[self.geocoder geocodeAddressString:@"沙河口区" completionHandler:^(NSArray *placemarks, NSError *error) {

    /**
     *  获取第一个地标
     */
    CLPlacemark *clPlacemark = [placemarks firstObject];

    /**
     定位地标转化为地图的地标
     */
    MKPlacemark *mkPlacemark = [[MKPlacemark alloc]initWithPlacemark:clPlacemark];

    NSDictionary *options = @{MKLaunchOptionsMapTypeKey:@(MKMapTypeStandard)};
    MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:mkPlacemark];

    [mapItem openInMapsWithLaunchOptions:options];
}];

}

5)listPlacemark方法(此方法可以同时定位两个位置)

- (void)listPlacemark
{
    /**
     *  根据"XXX"进行地理编码
     *
     *  @param placemarks block
     *  @param error      nil
     *
     *  @return void
     */
    [self.geocoder geocodeAddressString:@"北京市" completionHandler:^(NSArray *placemarks, NSError *error) {

        /**
         *  获取第一个地标
         */
        CLPlacemark *clPlacemark1 = [placemarks firstObject];

        /**
         定位地标转化为地图的地标
         */
        MKPlacemark *mkPlacemark1 = [[MKPlacemark alloc]initWithPlacemark:clPlacemark1];

        /**
         *  注意地理编码一次只能定位到一个位置,不能同时定位,所在放到第一个位置定位完成回调函数中再次定位
         *
         *  @param placemarks block
         *  @param error      nil
         *
         *  @return void
         */
        [self.geocoder geocodeAddressString:@"大连市沙河口区" completionHandler:^(NSArray *placemarks, NSError *error) {
            CLPlacemark *clPlacemark2 = [placemarks firstObject];
            MKPlacemark *mkPlacemark2 = [[MKPlacemark alloc]initWithPlacemark:clPlacemark2];
            NSDictionary *options = @{MKLaunchOptionsMapTypeKey:@(MKMapTypeStandard)};
            MKMapItem *mapItem1 = [[MKMapItem alloc]initWithPlacemark:mkPlacemark1];
            MKMapItem *mapItem2 = [[MKMapItem alloc]initWithPlacemark:mkPlacemark2];
            [MKMapItem openMapsWithItems:@[mapItem1, mapItem2] launchOptions:options];      
        }];
    }]; 
}

运行效果图
这里写图片描述

2.通过地名定位转换出坐标,通过坐标定位出详细信息
1)需要导入CoreLocation.framework框架

这里写图片描述

2)在工程中引入头文件

/**
 *  导入CoreLocation.framework框架, 用于定位使用
 *
 *  @param void
 *
 *  @return nil
 */
#import <CoreLocation/CoreLocation.h>

3)签协议,使用高德地图

@interface TwoLocationStylesViewController ()<CLLocationManagerDelegate>
/**
 *  签好协议,定义高德地图属性
 */
@property (nonatomic, strong)CLGeocoder *geocoder;
@end

4)以下是实现部分ViewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];

    /**
     初始化高德地图属性
     */
    self.geocoder = [[CLGeocoder alloc]init];

#pragma mark ** 地名->坐标

    [self getCoordinateByAddress:@"大连"];
#pragma mark ** 坐标->地名

    //[self getAddressByLatitude:39.54 longitude:116.28];/* 北京坐标 */

}

5)根据地名确定地理坐标(地名->坐标)

#pragma mark - 根据地名确定地理坐标(地名->坐标)
- (void)getCoordinateByAddress:(NSString *)address
{
[self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
    /**
     *  地理编码,取得第一个地标,一个地名可能搜出多个地址(placemark为数组)
     */
    CLPlacemark *placemark = [placemarks firstObject];
    /**
     *  位置
     */
    CLLocation *location = placemark.location;
    /**
     *  区域
     */
    CLRegion *region = placemark.region;
    /**
     *  详细的地址信息通过字典存储
     */
    NSDictionary *addressDic = placemark.addressDictionary;
    /**
     *  详细信息字典包含以下信息
     *
     */
//    NSString *name = placemark.name;/* 地名 */
//    NSString *thoroughfare = placemark.thoroughfare;/* 街道 */
//    NSString *s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值