你的位置:首页 > 操作系统

[操作系统]【代码笔记】离线地图


一,效果图。

二,工程图。

三,代码。

ViewController.h

复制代码
#import <UIKit/UIKit.h>#import <CoreLocation/CoreLocation.h>#import "MapLocation.h"@interface ViewController : UIViewController<MKMapViewDelegate>{  MKMapView *_mapView;  NSString *addressString;}@end
复制代码

 

ViewController.m

复制代码
#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

复制代码
#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

复制代码
//地图调用函数#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
复制代码