当前位置:编程学习 > wap >>

iphone开发之绘制地图线路

地图应用经常会涉及到线路的绘制问题,ios下可以使用MKMapView进行地图开发,使用
MKOverlayView进行线路的绘制。

使用MKMapView添加MKMap.framework 和CoreLocation.framework并导入

MapKit.h头文件。

新建一个基于视图的工程,修改头文件:


[cpp]   
//  CloViewController.h  
//  LocationMapTest  
//  
//  Created by Cloay on 12-6-18.  
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
//  
 
#import <UIKit/UIKit.h>  
#import <MapKit/MapKit.h>  
#import "CloMKAnnotation.h"  
@interface CloViewController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate, UIActionSheetDelegate>{ 
    MKMapView *cloMapView; 
    MKPolyline *routeLine; 

 
@property (nonatomic, strong)  NSMutableArray *locations; 
@end 
//
//  CloViewController.h
//  LocationMapTest
//
//  Created by Cloay on 12-6-18.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "CloMKAnnotation.h"
@interface CloViewController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate, UIActionSheetDelegate>{
    MKMapView *cloMapView;
    MKPolyline *routeLine;
}

@property (nonatomic, strong)  NSMutableArray *locations;
@end

修改实现代码,在.m中添加如下代码:

[cpp]    
//  CloViewController.m  
//  LocationMapTest  
//  
//  Created by Cloay on 12-6-18.  
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.  
//  
 
#import "CloViewController.h"  
 
@interface CloViewController () 
 
@end 
 
@implementation CloViewController 
@synthesize locations; 
 
- (void)viewDidLoad 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib.  
    cloMapView = [[MKMapView alloc] initWithFrame:[self.view bounds]]; 
    [cloMapView setMapType:MKMapTypeHybrid];  //设置地图类型 地图/卫星/两者结合  
    [cloMapView setShowsUserLocation:YES];      //显示当前位置  
    [cloMapView setDelegate:self]; 
     
    CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
    //设置CLLocationManager实例委托和精度  
    [locationManager setDelegate:self]; 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
    //设置距离筛选器,表示至少移动100米才通知委托更新  
    [locationManager setDistanceFilter:100.f]; 
    //启动更新请求  
//    [locationManager startUpdatingLocation];  
     
    locations = [[NSMutableArray alloc] init]; 
    float latitude = 39.8127;    //维度  
    float longitude = 116.2967;  //经度  
    for (int i = 0; i < 10; i++) { 
         
        [locations addObject:[NSString stringWithFormat:@"%f,%f", latitude + 0.01*i, longitude + 0.01*i]]; 
//            NSLog(@"locations:%i",locations.count);  
    } 
     
    //地图初始  
    CLLocationCoordinate2D coords; 
    coords.latitude = 39.9127; 
    coords.longitude = 116.3967; 
    float zoomlevel = 0.22; 
    MKCoordinateRegion region = MKCoordinateRegionMake(coords, MKCoordinateSpanMake(zoomlevel, zoomlevel)); 
    [cloMapView setRegion:[cloMapView regionThatFits:region] animated:YES]; 
     
    [cloMapView addOverlay:[self makePolylineWithLocations:locations]]; 
    [self.view addSubview:cloMapView]; 
     

 
- (void)viewDidUnload 

    [super viewDidUnload]; 
    // Release any retained subviews of the main view.  
    cloMapView = nil; 

 
- (void)dealloc{ 
    [cloMapView release]; 
    [super dealloc]; 

 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 

    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); 

 
 
//显示菜单选项  
- (void)showActionSheet :(id)sender{ 
    UIActionSheet * actionSheet = [[UIActionSheet alloc] initWithTitle:nil  
                                                              delegate:self  
                                                     cancelButtonTitle:@"取消" 
                                                destructiveButtonTitle:@"添加足迹" 
                                                     otherButtonTitles:@"分享",@"详细",@"删除", nil]; 
    [actionSheet setDelegate:self]; 
    [actionSheet showInView:self.view]; 
    [actionSheet release]; 

 
//根据坐标点生成线路  
- (MKPolyline *)makePolylineWithLocations:(NSMutableArray *)newLocations{ 
    MKMapPoint *pointArray = malloc(sizeof(CLLocationCoord

补充:移动开发 , IOS ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,