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