`
tank2308635
  • 浏览: 191710 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MapKit学习笔记

阅读更多

转自cocoachina:http://www.cocoachina.com/bbs/read.php?tid=73570&page=13

 

MapKit学习笔记

1、概述
插入MapView,设置Delegate(一般为Controller),Annotations记录兴趣位置点(AnnotationView用来显示兴趣位置点),annotation是可选的,选中的annotation会显示callout,用来显示信息。
2、设置地图显示类型:
mapView.mapType = MKMapTypeStandard;
mapView.mapType = MKMapTypeSatellite;
mapView.mapType = MKMapTypeHybrid; 
3、显示用户位置
设置为可以显示用户位置:
mapView.showsUserLocation = YES; 
判断用户当前位置是否可见(只读属性):
userLocationVisible 
得到用户位置坐标:当userLocationVisible为YES时
CLLocationCoordinate2D coords = mapView.userLocation.location.coordinate; 
4、坐标范围
MKCoordinateRegion用来设置坐标显示范围。
包括两部分:Center(CLLocationCoordinate2D struct,包括latitude和longitude),坐标中心
和Span(MKCoordinateSpan struct,包括latitudeDelta和longitudeDelta),缩放级别
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(center,2000, 2000); 
以上代码创建一个以center为中心,上下各1000米,左右各1000米得区域,但其是一个矩形,不符合MapView的横纵比例
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion]; 
以上代码创建出来一个符合MapView横纵比例的区域
[mapView setRegion:adjustedRegion animated:YES]; 
以上代码为:最终显示该区域
5、Delegate
使用MapView须符合MKMapViewDelegate协议
5.1、地图加载Delegate
当需要从Google服务器取得新地图时
mapViewWillStartLoadingMap: 
当成功地取得地图后
mapViewDidFinishLoadingMap: 
当取得地图失败后(建议至少要实现此方法)
mapViewDidFailLoadingMap:withError:
5.2、范围变化Delegate
当手势开始(拖拽,放大,缩小,双击)
mapView:regionWillChangeAnimated: 
当手势结束(拖拽,放大,缩小,双击)
mapView:regionDidChangeAnimated: 
判断坐标是否在MapView显示范围内:
CLLocationDegrees leftDegrees = mapView.region.center.longitude –(mapView.region.span.longitudeDelta / 2.0);
CLLocationDegrees rightDegrees = mapView.region.center.longitude +(mapView.region.span.longitudeDelta / 2.0);
CLLocationDegrees bottomDegrees = mapView.region.center.latitude –(mapView.region.span.latitudeDelta / 2.0);
CLLocationDegrees topDegrees = self.region.center.latitude +(mapView.region.span.latitudeDelta / 2.0);
if (leftDegrees > rightDegrees) { // Int'l Date Line in View
leftDegrees = -180.0 - leftDegrees;
if (coords.longitude > 0) // coords to West of Date Line
coords.longitude = -180.0 - coords.longitude;
}
If (leftDegrees <= coords.longitude && coords.longitude <= rightDegrees && bottomDegrees <= coords.latitude && coords.latitude <= topDegrees) {
// 坐标在范围内
}
6、Annotation
Annotation包含两部分:Annotation Object和Annotation View
Annotation Object必须符合协议MKAnnotation,包括两个方法:title和subtitle,分别用于显示注释的标题和子标题。还有coordinate属性,返回CLLocationCoordinate2D,表示Annotation的位置
然后,需使用mapView:viewForAnnotation: 方法来返回MKAnnotationView或者MKAnnotationView的子类用来显示Annotation(注意:这里显示的不是选中Annotation后的弹出框) 
你可以子类化MKAnnotationView,然后再drawRect:方法里面进行自己的绘制动作(这个方法很蠢)
你完全可以实例化一个MKAnnotationView,然后更改它的image属性,这样很简单。
7、添加移除Annotation
添加一个Annotation
[mapView addAnnotation:annotation]; 
添加一个Annotation数组
[mapView addAnnotations:[NSArray arrayWithObjects:annotation1, annotation2, nil]]; 
移除一个Annotation
removeAnnotation: 
移除一个Annotation数组
removeAnnotations: 
移除所有Annotation
[mapView removeAnnotations:mapView.annotations];
8、选中Annotation
一次只能有一个Annotation被选中,选中后会出现CallOut(浮动框)
简单的CallOut显示Title和SubTitle,但你也可以自定义一个UIView作为CallOut(与自定义的TableViewCell一样)
可通过代码选中Annotation:
selectAnnotation:animated: 
或者取消选择:
deselectAnnotation:animated:
9、显示Annotation
通过mapView:viewForAnnotation: 方法显示Annotation,每在MapView中加入一个Annotation,就会调用此方法
示例(与tableView:cellForRowAtIndexPath: 很相似)
- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>) annotation {
static NSString *placemarkIdentifier = @"my annotation identifier";
if ([annotation isKindOfClass:[MyAnnotation class]]) {
MKAnnotationView *annotationView = [theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
if (annotationView == nil) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
annotationView.image = [UIImage imageNamed:@"blood_orange.png"];
}
else
annotationView.annotation = annotation;
return annotationView;
}
return nil;
}
10、取得真实地址
示例:
初始化MKReverseGeocoder
MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:coordinates];
geocoder.delegate = self;
[geocoder start]; 
如果无法处理坐标,则调用reverseGeocoder:didFailWithError: 方法
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog(@"Error resolving coordinates: %@", [error localizedDescription]);
geocoder.delegate = nil;
[geocoder autorelease];

如果成功,则调用reverseGeocoder:didFindPlacemark: 并把信息存储在MKPlacemark 中
didFindPlacemark:(MKPlacemark *)placemark {
NSString *streetAddress = placemark.thoroughfare;
NSString *city = placemark.locality;
NSString *state = placemark.administrativeArea;
NSString *zip = placemark.postalCode;
// Do something with information
geocoder.delegate = nil;
[geocoder autorelease];
}

分享到:
评论

相关推荐

    ios-mapKit.zip

    MapKit是iOS操作系统中的一个核心框架,用于在应用程序中集成地图功能。这个框架与Apple的Map服务紧密相连,允许开发者创建交互式地图、定位用户、显示兴趣点(POIs)、规划路线等。在iOS应用开发中,MapKit是实现...

    IOS MapKit应用

    MapKit是iOS SDK中的一个核心框架,用于在iOS应用程序中集成地图功能。它与Apple的Map服务紧密集成,...通过学习和实践MapKit,开发者可以构建出具有专业地图功能的应用程序,满足用户在导航、位置服务等方面的需求。

    地图定位mapkit

    mapkit地图定位,自己编辑当前的位置

    IOS开发之——MapKit地图

    在iOS开发中,MapKit是苹果提供的一项强大的地图服务,它允许开发者在应用程序中集成地图功能,...通过深入学习"grgcombs-MultiRowCalloutAnnotationView-76927b9"项目,开发者可以进一步提升其在MapKit领域的技能。

    MKMapKit系统地图相关demo

    MKMapKit是Apple提供的一套强大的地图框架,用于在iOS和macOS应用中集成地图功能。这个框架允许开发者创建各种地图界面,包括显示...通过学习和实践这些示例,开发者能够熟练掌握在Apple平台上构建地图应用的关键技术。

    MapKit之在地图上加pin(转)

    在iOS开发中,MapKit是苹果提供的一套强大的地图服务框架,它允许开发者将地图集成到自己的应用中,并实现各种自定义功能。本篇主要探讨如何利用MapKit在地图上添加标记(Pin),以增强地图的交互性和信息展示。下面...

    MapKit 地图使用

    MapKit是苹果iOS和macOS平台上的一个强大框架,它为开发者提供了集成地图服务的能力,让用户可以在自己的应用程序中轻松地展示、操作和交互地图。在本文中,我们将深入探讨MapKit的基本概念、核心功能以及如何在实践...

    Mapkit 集群功能实例

    mapkit 上有时候会有很多annotation,如果全部照的原样显示出来未免有些杂乱,而且有的会重合。实例里根据zoom级别来自动调整显示的annotation,如果有重合的,用一个带有annotation计数的圆点图片来代替,这样简洁...

    用CLLocation与mapkit实现定位与搜索方位功能 iOS

    `CLLocation`是Apple的Core Location框架中的核心类,用于获取设备的地理位置信息,而MapKit则是提供地图展示和地图服务的框架。本文将深入探讨如何结合这两个技术,实现在iOS应用中进行定位并进行方位搜索。 首先...

    swift-用更简单的方式去使用地图支持MapKit高德地图百度地图

    Swift提供了强大的MapKit框架,而高德地图和百度地图则是国内广泛使用的地图服务提供商。本文将深入探讨如何在Swift项目中集成MapKit、高德地图SDK和百度地图SDK,以实现更简单的地图使用方式。 首先,我们来关注...

    GeoJSONSerialization, 在 GeoJSON & MapKit形状之间编码&解码.zip

    GeoJSONSerialization, 在 GeoJSON & MapKit形状之间编码&解码 GeoJSONSerialization根据基础类的API约定,GeoJSONSerialization 在 GeoJSON 和 MapKit之间进行编码和解码。用法解码#import &lt;MapKit/MapKit.h&

    IOS MAPKIT 照片分享

    《iOS MapKit照片分享:创新地呈现iPhone相册内容》 MapKit是Apple iOS平台上的一个强大框架,它允许开发者将地图集成到他们的应用程序中,为用户提供地理定位、导航和地图展示等功能。在这个主题中,我们将深入...

    利用MapKit框架地图定位

    在iOS开发中,MapKit框架是苹果提供的一种强大的地图服务工具,它允许开发者将地图集成到自己的应用程序中,实现各种地图相关的功能,如定位、显示标注、路线规划等。本篇我们将深入探讨如何利用MapKit框架及...

    mapkit-demo:苹果的Mapkit JS演示

    Apple Mapkit JS演示应用程序 这是一个节点js应用程序,使用Mapkit JS在浏览器中演示了Apple的Map。 要求 您需要Node js版本6或更高版本 通过此创建和下载Apple Maps的私钥 入门 cp .env-sample .env 在.env文件中...

    iOS9地图(MapKit)

    iOS 9 MapKit 地图 导航新增功能

    iOS5地图使用MapKit,使用CLGeocoder解析,原来的MKReverseGeocoder过时不可用

    在iOS开发中,MapKit框架是苹果提供的一种用于在应用程序中集成地图功能的强大工具。随着iOS版本的更新,某些API可能会被新版本替代,以提供更高效、更精确的服务。在iOS5中,一个显著的变化就是`MKReverseGeocoder`...

    使用iOS系统自带的MapKit实现地图坐标点平滑移动。.zip

    软件开发设计:PHP、QT、...云计算与大数据:数据集、包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。

    IOS应用源码之Apple的MapKit相关官方Sample三个送上WeatherMap.zip

    通过"WeatherMap"这个示例,开发者可以学习到如何将天气信息与地图功能结合,创建出具有实用性的iOS应用。这不仅加深了对MapKit的理解,也为开发其他类型的地图应用提供了灵感和实践指导。在实际开发中,应结合苹果...

    iOS inPractice第二部分第5章-通过教你制作一个上架应用来学习Mapkit和照相机功能

    在这篇文章中,我们将通过制作一个名为WhereAmIParked的上架应用来学习如何运用MapKit和照相机功能。 首先,介绍MapKit框架,它允许开发者在应用中嵌入地图,并可以实现标注、展示路线、搜索地点等丰富的地理信息...

Global site tag (gtag.js) - Google Analytics