一,效果图。
二,工程图。
三,代码。
viewcontroller.h
1
2
3
4
5
6
7
8
9
10
|
#import <uikit/uikit.h> #import <corelocation/corelocation.h> #import "maplocation.h" @interface viewcontroller : uiviewcontroller <mkmapviewdelegate> { mkmapview *_mapview; nsstring *addressstring; } @end |
viewcontroller.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
#import "viewcontroller.h" @interface viewcontroller () @end @implementation viewcontroller - ( void )viewdidload { [super viewdidload]; // do any additional setup after loading the view. //调用系统自带的高德地图 //显示当前某地的离线地图 _mapview = [[mkmapview alloc] init]; _mapview.frame = cgrectmake(0, 40, 320,400); _mapview.delegate = self; _mapview.maptype = mkmaptypestandard; [self.view addsubview:_mapview]; addressstring=@ "光启城" ; nslog(@ "---addressstring---%@" ,addressstring); [self geocodequery]; } - ( void )geocodequery{ if (addressstring == nil || [addressstring length] == 0) { return ; } clgeocoder *geocoder = [[clgeocoder alloc] init]; [geocoder geocodeaddressstring:addressstring completionhandler:^(nsarray *placemarks, nserror *error) { nslog(@ "查询记录数:%ld" ,[placemarks count]); if ([placemarks count] > 0) { [_mapview removeannotations:_mapview.annotations]; } for ( int i = 0; i < [placemarks count]; i++) { clplacemark* placemark = placemarks[i]; //调整地图位置和缩放比例 mkcoordinateregion viewregion = mkcoordinateregionmakewithdistance(placemark.location.coordinate, 10000, 10000); [_mapview setregion:viewregion animated:yes]; maplocation *annotation = [[maplocation alloc] init]; annotation.streetaddress = placemark.thoroughfare; annotation.city = placemark.locality; annotation.state = placemark.administrativearea; annotation.zip = placemark.postalcode; annotation.coordinate = placemark.location.coordinate; [_mapview addannotation:annotation]; } }]; } #pragma mark map view delegate methods - (mkannotationview *) mapview:(mkmapview *)themapview viewforannotation:(id <mkannotation>) annotation { mkpinannotationview *annotationview = (mkpinannotationview *)[_mapview dequeuereusableannotationviewwithidentifier:@ "pin_annotation" ]; if (annotationview == nil) { annotationview = [[mkpinannotationview alloc] initwithannotation:annotation reuseidentifier:@ "pin_annotation" ]; } annotationview.pincolor = mkpinannotationcolorpurple; annotationview.animatesdrop = yes; annotationview.canshowcallout = yes; return annotationview; } - ( void )mapview:(mkmapview *)mapview didupdateuserlocation:(mkuserlocation *)userlocation { _mapview.centercoordinate = userlocation.location.coordinate; } - ( void )mapviewdidfailloadingmap:(mkmapview *)themapview witherror:(nserror *)error { nslog(@ "error : %@" ,[error description]); } @end |
maplocation.h
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#import <mapkit/mapkit.h> @interface maplocation : nsobject<mkannotation> //街道信息属性 @property (nonatomic, copy) nsstring *streetaddress; //城市信息属性 @property (nonatomic, copy) nsstring *city; //州、省、市信息 @property (nonatomic, copy) nsstring *state; //邮编 @property (nonatomic, copy) nsstring *zip; //地理坐标 @property (nonatomic, readwrite) cllocationcoordinate2d coordinate; @end |
maplocation.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//地图调用函数 #import "maplocation.h" @implementation maplocation - (nsstring *)title { return @ "您的位置!" ; } - (nsstring *)subtitle { nsmutablestring *ret = [nsmutablestring new ]; if (_state) [ret appendstring:_state]; if (_city) [ret appendstring:_city]; if (_city && _state) [ret appendstring:@ ", " ]; if (_streetaddress && (_city || _state || _zip)) [ret appendstring:@ " • " ]; if (_streetaddress) [ret appendstring:_streetaddress]; if (_zip) [ret appendformat:@ ", %@" , _zip]; return ret; } @end |