IOS 地图控件 : mapkit

第一步

显示地图

[cpp] view plaincopyprint?
  1. - (void)viewDidLoad
  2. {
  3. self.mapView=[[[MKMapView alloc] initWithFrame:self.view.bounds] autorelease];
  4. mapView.delegate=self;
  5. mapView.autoresizingMask= (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
  6. [self.view addSubview:mapView];
  7. [self.mapView setZoomEnabled:YES];
  8. [self.mapView setScrollEnabled:YES];
  9. [super viewDidLoad];
  10. // Do any additional setup after loading the view from its nib.
  11. }
- (void)viewDidLoad
{  self.mapView=[[[MKMapView alloc] initWithFrame:self.view.bounds] autorelease];mapView.delegate=self;mapView.autoresizingMask= (UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);[self.view addSubview:mapView];[self.mapView setZoomEnabled:YES];[self.mapView setScrollEnabled:YES];   [super viewDidLoad];// Do any additional setup after loading the view from its nib.
} 

也可以直接托控件。 直接运行,OK . 没问题。

第二步:

启动定位服务,标注自己当前位置

[cpp] view plaincopyprint?
  1. if (lm) {
  2. lm.delegate=nil;
  3. [lm release];
  4. lm=nil;
  5. }
  6. lm=[[CLLocationManager alloc] init];
  7. lm.delegate=self;
  8. lm.desiredAccuracy= kCLLocationAccuracyNearestTenMeters;
  9. lm.distanceFilter =1000.0f;
  10. [lm startUpdatingLocation];
  if (lm) {lm.delegate=nil;[lm release];lm=nil;} lm=[[CLLocationManager alloc] init];  lm.delegate=self;lm.desiredAccuracy= kCLLocationAccuracyNearestTenMeters;lm.distanceFilter =1000.0f; [lm startUpdatingLocation];

如果定位成功 :

[cpp] view plaincopyprint?
  1. -(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
  2. {
  3. if (!newLocation) {
  4. [self locationManager:manager didFailWithError:(NSError *)NULL];
  5. }
  6. if (signbit(newLocation.horizontalAccuracy)) {
  7. [self locationManager:manager didFailWithError:(NSError *)NULL];
  8. return;
  9. }
  10. [manager stopUpdatingLocation];
  11. CLLocationCoordinate2D _coordination = [newLocation coordinate];
  12. now_lat = _coordination.latitude;
  13. now_lng =_coordination.longitude;
  14. mapView.showsUserLocation =YES;
  15. [lm stopUpdatingLocation];
  16. ///
  17. [NSThread detachNewThreadSelector:@selector(getNear) toTarget:self withObject:nil];
  18. }
-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{if (!newLocation) {[self locationManager:manager didFailWithError:(NSError *)NULL]; } if (signbit(newLocation.horizontalAccuracy)) {[self locationManager:manager didFailWithError:(NSError *)NULL];  return;} [manager stopUpdatingLocation]; CLLocationCoordinate2D _coordination = [newLocation coordinate]; now_lat = _coordination.latitude;now_lng =_coordination.longitude; mapView.showsUserLocation =YES;[lm stopUpdatingLocation]; /// [NSThread detachNewThreadSelector:@selector(getNear) toTarget:self withObject:nil];}

这样便可以定自己当前位置。

/***

线程是根据当前经纬度 从网络上获取附近 。

返回JSON 字符串, 然后解析json 。

得到每个对象经纬度

**/

第三步:

在地图上画圈

首先在 头文件定义 :

[cpp] view plaincopyprint?
  1. @property(nonatomic,retain)MKCircle *circle;
 @property(nonatomic,retain)MKCircle *circle;

圈的颜色,属性

[cpp] view plaincopyprint?
  1. -(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
  2. {
  3. MKOverlayView *view=nil;
  4. if ([overlay isKindOfClass:[MKCircle class]]) {
  5. MKCircleView *cirView =[[MKCircleView alloc] initWithCircle:overlay];
  6. cirView.fillColor=[UIColor redColor];
  7. cirView.strokeColor=[UIColor redColor];
  8. cirView.alpha=0.1;
  9. cirView.lineWidth=4.0;
  10. view=[cirView autorelease];
  11. }
  12. return view;
  13. }
-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{ MKOverlayView *view=nil;if ([overlay isKindOfClass:[MKCircle class]]) {MKCircleView *cirView =[[MKCircleView alloc] initWithCircle:overlay]; cirView.fillColor=[UIColor redColor]; cirView.strokeColor=[UIColor redColor]; cirView.alpha=0.1;cirView.lineWidth=4.0;view=[cirView autorelease];} return view;
}

第四步:

显示自己位置和为地图添加标注

[cpp] view plaincopyprint?
  1. @interface POI : NSObject<MKAnnotation>
  2. {
  3. CLLocationCoordinate2D coordinate;
  4. NSString *subtitle;
  5. NSString *title;
  6. NSString *cofeId ;
  7. NSString *doroname;
  8. }
  9. @property (nonatomic,readonly) CLLocationCoordinate2D coordinate;
  10. @property (nonatomic,copy) NSString *subtitle;
  11. @property (nonatomic,copy) NSString *title;
  12. @property (nonatomic,copy) NSString *xId ;
  13. @property (nonatomic,copy) NSString *name; ;
  14. -(id) initWithCoords:(CLLocationCoordinate2D) coords;
@interface POI : NSObject<MKAnnotation>
{CLLocationCoordinate2D coordinate;NSString *subtitle;NSString *title; NSString *cofeId ; NSString *doroname;
}@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic,copy) NSString *subtitle;
@property (nonatomic,copy) NSString *title;
@property (nonatomic,copy) NSString *xId ;
@property (nonatomic,copy) NSString *name; ;  -(id) initWithCoords:(CLLocationCoordinate2D) coords;
[cpp] view plaincopyprint?
  1. @implementation POI
  2. @synthesize coordinate,subtitle,title;
  3. @synthesize xId;
  4. @synthesize doroname;
  5. - (id) initWithCoords:(CLLocationCoordinate2D) coords{
  6. self = [super init];
  7. if (self) {
  8. coordinate = coords;
  9. }
  10. return self;
  11. }
  12. - (void) dealloc
  13. {
  14. [title release];
  15. [subtitle release];
  16. [xId release];
  17. [doroname release];
  18. [super dealloc];
  19. }
  20. @end
@implementation POI@synthesize coordinate,subtitle,title;
@synthesize xId;
@synthesize doroname;- (id) initWithCoords:(CLLocationCoordinate2D) coords{self = [super init];if (self) {coordinate = coords; }return self;}- (void) dealloc{[title release];[subtitle release]; [xId release]; [doroname release];[super dealloc];
}@end

这个网上很多, 可以根据需求自己适当修改 。

[cpp] view plaincopyprint?
  1. doors=[jsonDic objectForKey:@"roomshops"];
  2. for (NSDictionary *dic in doors) {
  3. CLLocationCoordinate2D  p1;
  4. p1.latitude= [[dic objectForKey:@"roomLng"] doubleValue];
  5. p1.longitude=[[dic objectForKey:@"roomLat"] doubleValue];
  6. POI *poi = [[[POI alloc] initWithCoords:p1] autorelease];
  7. poi.title=[dic objectForKey:@"roomName"];
  8. poi.subtitle=[dic objectForKey:@"roomAddress"];
  9. poi.xId= [dic objectForKey:@"roomid"];
  10. poi.doroname=[dic objectForKey:@"room"];
  11. [mapView addAnnotation:poi];
  12. }
     doors=[jsonDic objectForKey:@"roomshops"];    for (NSDictionary *dic in doors) { CLLocationCoordinate2D  p1;   p1.latitude= [[dic objectForKey:@"roomLng"] doubleValue]; p1.longitude=[[dic objectForKey:@"roomLat"] doubleValue];POI *poi = [[[POI alloc] initWithCoords:p1] autorelease];  poi.title=[dic objectForKey:@"roomName"];poi.subtitle=[dic objectForKey:@"roomAddress"];  poi.xId= [dic objectForKey:@"roomid"]; poi.doroname=[dic objectForKey:@"room"];[mapView addAnnotation:poi];}

解析json。

这里要说明以下, google地图先纬度,再经度。 而一般我们都是先经度,再纬度。

地图标注 :

[cpp] view plaincopyprint?
  1. - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
  2. {
  3. /// 判断是否是自己
  4. if ([annotation isKindOfClass:[POI class]]) {
  5. MKAnnotationView *view = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:[annotation title] ];
  6. if (view==nil) {
  7. view= [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:[annotation title]] autorelease];
  8. }
  9. else
  10. {
  11. view.annotation=annotation;
  12. }
  13. POI *pview= annotation;
  14. if ([pview.doroname isEqual:@"你大爷"]) {
  15. [view setImage:[UIImage imageNamed:@"poi.png"]];
  16. view.canShowCallout=YES;
  17. UIButton *btn = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
  18. view.rightCalloutAccessoryView=btn;
  19. }
  20. else
  21. {
  22. [view setImage:[UIImage imageNamed:@"大小_选中.png"]];
  23. view.canShowCallout=YES;
  24. UIButton *btn = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
  25. view.rightCalloutAccessoryView=btn;
  26. }
  27. return  view;
  28. }
  29. else
  30. {
  31. POI *Mapannotation = annotation;
  32. Mapannotation.title=@"当前位置";
  33. return nil;
  34. }
  35. }
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { /// 判断是否是自己if ([annotation isKindOfClass:[POI class]]) {MKAnnotationView *view = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:[annotation title] ]; if (view==nil) {view= [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:[annotation title]] autorelease]; } else{view.annotation=annotation;} POI *pview= annotation;  if ([pview.doroname isEqual:@"你大爷"]) {[view setImage:[UIImage imageNamed:@"poi.png"]]; view.canShowCallout=YES; UIButton *btn = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];view.rightCalloutAccessoryView=btn;}  else{[view setImage:[UIImage imageNamed:@"大小_选中.png"]]; view.canShowCallout=YES; UIButton *btn = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];view.rightCalloutAccessoryView=btn;}return  view;} else{ POI *Mapannotation = annotation; Mapannotation.title=@"当前位置"; return nil;  }}

截图说明,因为我圈是加在中间的, 所以会这样。

转载于:https://www.cnblogs.com/DamonTang/archive/2012/07/12/2588347.html

IOS开发-地图 (mapkit)实验相关推荐

  1. iOS开发--地图与定位

    iOS开发--地图与定位 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们 ...

  2. iOS开发地图的代码和方法

    类方法 说明 + (BOOL)locationServicesEnabled; 是否启用定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务 + (CLAuthorizationStatus ...

  3. IOS开发之——MapKit地图

    1.概述 插入MapView,设置Delegate(一般为Controller),Annotations记录兴趣位置点(AnnotationView用来显示兴趣位置点),annotation是可选的, ...

  4. 转-iOS开发系列--地图与定位

    来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...

  5. iOS学习笔记-地图MapKit入门

    代码地址如下: http://www.demodashi.com/demo/11682.html 这篇文章还是翻译自raywenderlich,用Objective-C改写了代码.没有逐字翻译,如有错 ...

  6. iOS开发那些事-iOS6苹果地图有用开发

    在iOS 6之后,不再使用谷歌地图了,而是使用苹果自己的地图,可是API编程接口没有太大的变化.开发者不须要再学习非常多新东西就能开发地图应用,这是负责任的做法.因此本节介绍的内容也相同适用于iOS5 ...

  7. IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应

    (转)IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应 IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油 ...

  8. IOS开发百度地图API

    IOS百度地图API开发自定义气泡,点击气泡自动生成路线,以及拖拽 IOS百度地图开发POISearch搜索附近停车场,附近加油站 IOS百度地图视角跳到用户当前位置 IOS百度地图开发实时路况 IO ...

  9. ios开发中如何调用苹果自带地图导航

    前段时间一直在赶项目,在外包公司工作就是命苦,天天加班不说,工作都是和工期合同挂钩的,稍微逾期就有可能被扣奖金,不谈这些伤脑筋的事情了,让我们说说iOS开发中如何调用苹果手机自带的地图. 学习如逆水行 ...

最新文章

  1. python对笔记本电脑的要求-Python的用法笔记本
  2. UA MATH564 概率论II 连续型随机变量1
  3. 利用nodeJs anywhere搭建本地服务器环境
  4. Cass2008 for CAD2006 安装
  5. BZOJ 1529: [POI2005]ska Piggy banks( 并查集 )
  6. 开源数据屏蔽 数据加密_数据屏蔽或更改行为信息
  7. 如何在 Serverless K8s 集群中低成本运行 Spark 数据计算?
  8. 解决 Illegal DefaultValue null for parameter type integer 异常
  9. python入门视频教程-Python入门视频全套教程
  10. 证件照电子版该如何在手机上制作
  11. RC电路 波形分析
  12. 动态分析Android App之动态调试(一)
  13. PuTTY key format too new怎么解决?
  14. 微信视频号打造带货闭环:主播叫苦连天
  15. 最优化及其运用 学习笔记(二)
  16. 基于envoy的分布式网关-contour
  17. pymol安装与分子对接前预处理蛋白质
  18. Linux C哲学家吃饭问题
  19. 复现NC图表:相关性分析气泡图(热图)---同时展示正负调控关系和显著性
  20. 富士胶片消毒喷雾及湿巾在日本证实可抑制新冠病毒感染

热门文章

  1. python的工资为什么这么低-现在为什么 Python 这么火?
  2. python新手小项目-推荐:一个适合于Python新手的入门练手项目
  3. 为何python不好找工作k-给急着找工作的人一些建议,别在被骗了!
  4. python从入门到精通怎么样-Python 从入门到精通:一个月就够了
  5. python填写excel-Python|读、写Excel文件(三种模块三种方式)
  6. 如何自学python爬虫-小白如何快速学习Python爬虫?
  7. python界面翻译-我用40行python代码写一个桌面翻译器,很nice
  8. python测试开发自学教程-自动化平台测试开发:Python测试开发实战_PDF电子书
  9. python读取文件名-python读取文件名并改名字的实例
  10. 编程软件python中的if用法-给Python初学者的一些编程技巧