iOS开发之离线地图核心代码

所属分类: 软件编程 / IOS 阅读数: 1327
收藏 0 赞 0 分享

一,效果图。


二,工程图。


三,代码。

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

更多精彩内容其他人还在看

IOS 使用Block二次封装AFNetworking 3.0详解

这篇文章主要介绍了IOS 使用Block二次封装AFNetworking 3.0详解的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

IOS 开发之对象为空的判断(nil、null)详解

这篇文章主要介绍了IOS 开发之对象为空的判断(nil、null)详解的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS创建对象的不同姿势详解

这篇文章主要介绍了iOS创建对象的不同姿势,文中介绍的很详细,对大家具有一定的参考价值,有需要的朋友们下面来一起学习学习吧。
收藏 0 赞 0 分享

探究iOS多线程究竟不安全在哪里?

iOS多线程安全的概念在很多地方都会遇到,为什么不安全,不安全又该怎么去定义,其实是个值得深究的话题。那么通过下面这篇文章小编和大家一起来探究了iOS多线程究竟不安全在哪里?需要的朋友可以参考学习。
收藏 0 赞 0 分享

IOS购物车界面实现效果示例

本篇文章主要介绍了IOS购物车界面实现效果示例,有需要了解的朋友可参考。希望此文章对各位有所帮助。
收藏 0 赞 0 分享

iOS Touch ID 身份认证

本文主要介绍了iOS Touch ID 身份认证的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

iOS 使用 socket 实现即时通信示例(非第三方库)

这篇文章主要介绍了iOS 使用 socket 即时通信示例(非第三方库)的资料,这里整理了详细的代码,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

ios常见加密解密方法(RSA、DES 、AES、MD5)

本篇文章主要介绍了ios常见加密解密方法(RSA、DES 、AES、MD5),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

iOS利用AFNetworking实现文件上传的示例代码

本篇文章主要介绍了iOS利用AFNetworking实现文件上传的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈IOS中AFNetworking网络请求的get和post步骤

本篇文章主要介绍了浅谈IOS中AFNetworking网络请求的get和post步骤的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
收藏 0 赞 0 分享
查看更多