iphone 如何使用地图MapKit
来源:互联网 发布:java事务例子 编辑:程序博客网 时间:2024/05/16 06:59
转载地址:http://blog.csdn.net/tangaowen/article/details/6527901
iphone 如何使用地图MapKit
1。 首先在framework中加入 MapKit.framework
2。 类中 #import <MapKit/MapKit.h>
3。 类中定义
CLLocationManager * locationManager;
CLLocationCoordinate2D curLocation;
MKMapView * UsermapView;
4。类实现 CLLocationManagerDelegate,MKMapViewDelegate 两个delegate
5。用上一篇中的方法,获得了 用户的所在的位置 curLocation。
(1) 在获取到当前的位置后,显示当前位置所在位置的1000米所在区域。
- //响应当前位置的更新,在这里记录最新的当前位置
- - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation
- fromLocation:(CLLocation *)oldLocation
- {
- NSLog(@"newLocation:%@",[newLocation description]);
- //如果是第一次加载地图
- if (UsermapView==nil)
- {
- UsermapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
- UsermapView.mapType = MKMapTypeStandard;
- UsermapView.zoomEnabled=YES;
- UsermapView.showsUserLocation=YES;
- UsermapView.delegate=self;
- [UsermapView autorelease];
- [self.view addSubview:UsermapView];
- }
- //设置显示区域
- MKCoordinateRegion region=MKCoordinateRegionMakeWithDistance(newLocation.coordinate,1000 ,1000 );
- [UsermapView setRegion:region animated:TRUE];
- }
如果要显示经纬度表示的(0.05,0.05)范围:
将上面的 区域设置为下面的代码即可:
- //设置显示区域
- MKCoordinateSpan span=MKCoordinateSpanMake(0.05,0.05);
- MKCoordinateRegion region=MKCoordinateRegionMake(newLocation.coordinate,span);
(2) 如何在地图上增加地图注解
2。1 首先要从 MKAnnotationView 派生出一个自定义的 类,用来实现个性化的 注解。
- @interface MapAnnotation : NSObject <MKAnnotation>
- {
- CLLocationCoordinate2D coordinate;
- NSString * title;
- NSString * subtitle;
- //自己定义的其他信息成员
- }
- @property (nonatomic,readonly) CLLocationCoordinate2D coordinate;
- @property (nonatomic,retain) NSString * title;
- @property (nonatomic,retain) NSString * subtitle;
- @end
- @implementation MapAnnotation
- @synthesize coordinate;
- @synthesize title;
- @synthesize subtitle;
- - (id) initWithCoordinate:(CLLocationCoordinate2D) temp_coordinate
- {
- if ([super init])
- {
- coordinate=temp_coordinate;
- }
- return self;
- }
- - (void) dealloc
- {
- self.title=nil;
- self.subtitle=nil;
- [super dealloc];
- }
- @end
2。2 怎么添加一个注解:
- //标注用户
- CLLocationCoordinate2D userLocation;
- CLLocationDegrees latitude=111.005;
- CLLocationDegrees longtitude=21.015;
- userLocation.latitude=latitude;
- userLocation.longitude=longtitude;
- MapAnnotation * annotation=[[[MapAnnotation alloc] initWithCoordinate:userLocation] autorelease];
- annotation.title=@"小A";
- annotation.subtitle=@"20岁";
- ermapView addAnnotation:annotation];
根据 注解 ,产生注解视图
- (void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray*) views
当增加一个注解的时候,上面的函数就会被调用,以产生一个注解视图,下面的代码是产生一个小人图标,放到地图上。
- //delegate MKMapViewDelegate
- - (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
- {
- //判断是否是自己
- if ([annotation isKindOfClass:[MapAnnotation class]]==YES)
- {
- MKAnnotationView * view;
- view=(MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:annotation.title];
- if (view==nil)
- {
- view=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotation.title] autorelease];
- }
- else
- {
- view.annotation=annotation;
- }
- //设置图标
- MapAnnotation * Mapannotation=annotation;
- [view setImage:[UIImage imageNamed:@"avatar_boy.png"] ];
- view.canShowCallout=TRUE;
- return view;
- }
- else
- {
- MapAnnotation * Mapannotation=annotation;
- Mapannotation.title=@"当前位置";
- return nil;
- }
- }
当用户点击地图上面的注解视图的时候,也就是点击小人的时候,会调用下面的函数:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
- //当用户点击小人图标的时候,就进入这里,即将显示 AnnotationView
- - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
- {
- if ([view.annotation isKindOfClass:[MapAnnotation class]]==NO)
- {
- return ;
- }
- //设置显示的视图的内容
- MapAnnotation * annotation=(MapAnnotation *) view.annotation;
- //通过MapAnnotation就可以获得自己设置的一些个性化信息。
- //然后,根据这些信息来设置,这里是获得头像的文件路径,然后
- //设置到 VIEW
- UIImageView * headImageView= ( UIImageView *) view.leftCalloutAccessoryView ;
- [headImageView setImage:[UIImage imageWithContentsOfFile: nsFilePath] ];
- }
设置VIEW的左右边分别是什么内容,下面是设置左边为一个Image,右边是一个箭头的button。
- - (void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray*) views
- {
- int i=0;
- for (MKPinAnnotationView *mkview in views )
- {
- //判断是否是自己
- if ([mkview.annotation isKindOfClass:[MapAnnotation class]]==NO)
- {
- continue;
- }
- else
- {
- UIImageView * headImageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"online.png"] ];
- [headImageView setFrame:CGRectMake(1, 1, 30, 32)];
- [headImageView autorelease];
- mkview.leftCalloutAccessoryView=headImageView;
- UIButton * rightbutton=[UIButton buttonWithType:UIButtonTypeDetailDisclosure];
- mkview.rightCalloutAccessoryView=rightbutton;
- }
- i++;
- }
- }
当用户点击VIEW后,将会调用下面的函数:
-(void) mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *) control
- -(void) mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *) control
- {
- MapAnnotation * annotation= view.annotation;
- // 根据 MapAnnotation,取出个性化的个人信息,然后创建自己
- // 的新的VIEW,并且显示。
- }
(3) 如何检测到地图显示范围的改变
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
- //当地图显示范围发生变化的时候
- - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
- {
- MKCoordinateRegion curRegin=UsermapView.region;
- }
(4) 如何计算 当前显示范围的 显示半径
- MKCoordinateRegion curRegin=UsermapView.region;
- MKMapPoint mapPointCenter=MKMapPointForCoordinate(curRegin.center);
- CLLocationCoordinate2D outerCoordinate=curRegin.center;
- outerCoordinate.latitude+= curRegin.span.latitudeDelta/2.0;
- outerCoordinate.longitude+=curRegin.span.longitudeDelta/2.0;
- MKMapPoint mapPointOuter=MKMapPointForCoordinate(outerCoordinate);
- CLLocationDistance double_distance= MKMetersBetweenMapPoints(mapPointCenter,mapPointOuter);
- unsigned int cur_distance=(unsigned int) double_distance;
- NSLog(@"cur_distance=%d",cur_distance);
- iphone 如何使用地图MapKit
- iphone 如何使用地图MapKit
- iphone 如何使用地图MapKit
- MapKit 地图使用
- IOS开发 使用地图 MapKit
- IOS开发 使用地图 MapKit
- IOS开发 使用地图 MapKit
- IOS开发 使用地图 MapKit
- IOS开发 使用地图 MapKit
- MapKit 地图
- iOS --- 地图框架MapKit的简单使用
- iOS地图展示mapkit框架-基本使用
- 第十章:使用MapKit开发地图服务
- iPhone Mapkit 之在地图加入坐标点
- MapKit --- iOS中的地图框架 - iPhone手机开发技术文章
- iOS开发中地图(MapKit)的使用
- iOS开发中地图(MapKit)的使用
- 【iOS】Mapkit的使用:地图显示、定位、大头针、气泡等
- HBase总结(十一)hbase Java API 介绍及使用示例
- gpg加密
- Asp.Net MVC 3【Filters(过滤器)】
- UglifyJS 压缩坑
- Java 实现责任链(Chain of Responsibility)模式
- iphone 如何使用地图MapKit
- 依赖、聚合及继承
- lancher任务总结
- Python-3.X和2.X版本的区别
- Android支持横行滚动的ListView控件
- hdu 3874 Necklace(线段树)
- js数组的操作
- Altera公司高速PCB布线指南
- 立方网线程笔试题