mkmapView的应用

转载 2016年06月02日 10:04:44
#import "ViewController.h"
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<MKMapViewDelegate,CLLocationManagerDelegate,UISearchBarDelegate>
{
    MKPointAnnotation *pint;
    CLGeocoder *clg;
}

@property(nonatomic,strong)MKMapView *mapView;
@property(nonatomic,strong)CLLocationManager *clloca;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
    //初始化对象
    self.mapView=[[MKMapView alloc] initWithFrame:CGRectMake(0, 68, self.view.frame.size.width, self.view.frame.size.height)];
    
    clg=[[CLGeocoder alloc] init];
    //标准地图
    self.mapView.mapType=MKMapTypeStandard;
    //当前位置标点类型
    [self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];
    //是否显示当前位置
    self.mapView.showsUserLocation=YES;
    
    self.mapView.scrollEnabled=YES;
    self.mapView.delegate=self;
    
    //缩放
    self.mapView.zoomEnabled=YES;
    self.mapView.showsScale=YES;
    
    [self.view addSubview:self.mapView];
    
    if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"定位服务不可用!");
        
        return;
    }else{
        
        self.clloca=[[CLLocationManager alloc] init];
        //设置代理
        [self.clloca setDelegate:self];
        //设置精准度
        [self.clloca setDesiredAccuracy:kCLLocationAccuracyBest];
        
        //是否获取授权
        [self.clloca startUpdatingLocation];
        //调取
        [self.clloca requestAlwaysAuthorization];
    }
    
    self.mapView.userInteractionEnabled=YES;
    UILongPressGestureRecognizer *press=[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(pre:)];
    
    press.minimumPressDuration=0.3;
    [self.mapView addGestureRecognizer:press];
    
    [self addsear];
}

-(void)addsear{
    
    UISearchBar *search=[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 150, 40)];
    search.showsCancelButton=YES;
    search.showsSearchResultsButton=YES;
    search.delegate=self;
    self.navigationItem.titleView=search;
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    
    [clg geocodeAddressString:searchBar.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        if (placemarks.count>0) {
            
            CLPlacemark *place=placemarks[0];
            CLLocation *location=place.location;
            CLLocationCoordinate2D coor=location.coordinate;
            MKCoordinateSpan span;
            span.latitudeDelta=0.01;
            span.longitudeDelta=0.01;
            MKCoordinateRegion region={coor,span};
            [self.mapView setRegion:region animated:YES];
        }
    }];
    searchBar.text=nil;
}


-(void)pre:(UILongPressGestureRecognizer *)sender{
    
    CGPoint point=[sender locationInView:self.mapView];
    CLLocationCoordinate2D coord=[self.mapView convertPoint:point toCoordinateFromView:self.mapView];
    
    CLLocation *location=[[CLLocation alloc] initWithLatitude:coord.latitude longitude:coord.longitude];
    
  //方向解析
    [clg reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        
        CLPlacemark *placem=[placemarks objectAtIndex:0];
        
        NSArray *arry=[placem.addressDictionary objectForKey:@"FormattedAddressLines"];
        NSMutableString *str=[[NSMutableString alloc] init];
        
        for (int i=0; i<arry.count; i++) {
            [str appendString:arry[i]];
        }
        
        [self.mapView removeAnnotation:pint];
        pint=[[MKPointAnnotation alloc] init];
        pint.coordinate=coord;
        pint.title=@"放上大头针";
        pint.subtitle=[NSString stringWithFormat:@"%@",str];
        
        [self.mapView addAnnotation:pint];
    }];
}

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    CLLocation *location=[locations firstObject];
    CLLocationCoordinate2D cooldina=location.coordinate;
}


//自定义锚点
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    
    static NSString *str=@"pointid";
    MKAnnotationView *mkan=[mapView dequeueReusableAnnotationViewWithIdentifier:str];
    
    if (mkan==nil) {
        mkan=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:str];
    }
    
    mkan.image=[UIImage imageNamed:@"poi_2"];
    mkan.canShowCallout=YES;
    mkan.selected=YES;
    
    return mkan;
}

+(CLAuthorizationStatus)positionAuthorizationStatus{
    return [CLLocationManager authorizationStatus];
}
+(void)authorizePosition:(CLLocationManager *)manager{
    [manager requestAlwaysAuthorization];
}

iphone开发----计算MKMapView的缩放等级

IOS的sdk中MKMapView并没有提供得到当前地图zoom level的方法,本人google了好久,找到了一个方法来计算地图的zoom level,如下:  #define MERCAT...
  • jeffasd
  • jeffasd
  • 2016年01月08日 11:44
  • 1045

MKMapView 学习总结(一)

MKMapView对象提供内嵌的map接口。和maps应用程序提供的类似。你可以使用这个类来显示地图信息并且来通过你的应用程序操控地图内容。你可以通过一个指定的座标来center你的map,指定你想要...
  • binglan520
  • binglan520
  • 2015年04月17日 15:13
  • 580

iOS开发--MKMapView的使用

ios地图开发的基本知识,概含地图显示、定位、大头针和overlay等。
  • VictoryKNight
  • VictoryKNight
  • 2014年12月07日 22:15
  • 1542

iOS MKMapView Memory Leak

最近使用MKMapView,发现有内存泄露。经查发现属iOS系统 bug,参见 http://stackoverflow.com/questions/16420018/memory-not-be...
  • rigel_xu
  • rigel_xu
  • 2016年08月08日 04:19
  • 1777

苹果地图使用之MKMapView定位显示

#import #define kScreenWidht [UIScreen mainScreen].bounds.size.width #define kScreenHeight [UIScr...
  • yaoliangjun306
  • yaoliangjun306
  • 2017年01月06日 21:33
  • 824

限制MKMapView显示的区域

限制MKMapView显示的区域: 自定义一个显示范围 (根据 centerCoord 和 span 来确定地图的初始 Region),拖动或者缩放都不能超过限定的范围。 -(void)mapView...
  • wwmusic
  • wwmusic
  • 2013年08月12日 16:15
  • 2102

MKMapView上获取自身当前位置并将地图显示范围控制在自身位置周围

1,框架中添加CoreLocation.framework 2,引入头文件#import 3,
  • NOHACKCCC
  • NOHACKCCC
  • 2014年06月22日 11:18
  • 1541

iOS开发 地图:MKMapView控件的使用

转载地址:http://www.cnblogs.com/xjf125/p/4893384.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=t...
  • jijiji000111
  • jijiji000111
  • 2016年09月08日 11:31
  • 4546

iOS 设置MKMapView的缩放级别

设置MKMapView的缩放级别 map.setCenter(new google.maps.LatLng(37.4419, -122.1419), 13); 这个setCenter设置中心点...
  • ShangShanRuoShuidb
  • ShangShanRuoShuidb
  • 2013年06月11日 14:17
  • 9230

MKMapView简单的路线绘画

newCoor= malloc(sizeof(CLLocationCoordinate2D) * 2); #pragma mark -- CLLocationManagerDelegate - ...
  • qq348931837
  • qq348931837
  • 2016年01月21日 09:41
  • 1123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mkmapView的应用
举报原因:
原因补充:

(最多只允许输入30个字)