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"
@inte易做图ce 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"
@inte易做图ce 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"
@inte易做图ce 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)shouldAutorotateToInte易做图ceOrientation:(UIInte易做图ceOrientation)inte易做图ceOrientation
{
return (inte易做图ceOrientation != UIInte易做图ceOrientationPortraitUpsideDown);
}
//显示菜单选项
- (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 ,