iOS开发

ios开发 地图开发教程,ios地图开发教程

Linux基金会Kubernetes安全专家认证上线,预约享早鸟折扣,最后三天!>>>iOS原生地图开发详解

一、初始化地图视图与相关属性方法介绍1、初始化地图视图地图视图的展示依赖于MKMapView这个类,这个类继承于UIView,因此和其他View的使用方法类似。在我们需要展现地图的地方:

– (void)viewDidLoad {    [super viewDidLoad];    MKMapView * mapView =[[MKMapView alloc]initWithFrame:self.view.frame];    [self.view addSubview:mapView];}运行发现,一张世界地图就在我们的设备上了,apple内置的地图数据是由高德提供的。

2、系统提供的三种地图样式可以通过MKMapView的mapType这个属性设置地图的模式:

@property(nonatomic) MKMapType mapType;

typedef NS_ENUM(NSUInteger, MKMapType) {    MKMapTypeStandard = 0,//标准式的行政地图(会显示城市,街道等)    MKMapTypeSatellite,//标准的卫星地图    MKMapTypeHybrid//混合地图(在卫星图上显示街道等名称)};3、设置地图的中心和比例尺在百度地图等第三方地图服务的SDK中,都会提供一个类似zoomLevel比例尺的属性。通过官方的API设置这个属性有些麻烦,但是也更加灵活。首先,设置地图的中心位置和比例尺是通过region这个属性实现的。region结构体如下:

typedef struct {    CLLocationCoordinate2D center;//地图中心的经纬度    MKCoordinateSpan span;//地图显示的经纬度范围} MKCoordinateRegion;这个结构体中包含了两个结构体,其中CLLocationCoordinate2D很好理解,就是简单的经纬度,解释如下:

typedef struct {    CLLocationDegrees latitude;//纬度,北纬为正,南纬为负    CLLocationDegrees longitude;//经度,东经为正,西经为负} CLLocationCoordinate2D;MKCoordinateSpan这个结构体比较复杂,如下:

typedef struct {    CLLocationDegrees latitudeDelta;//纬度范围    CLLocationDegrees longitudeDelta;//经度范围} MKCoordinateSpan;这个结构体定义的应该是一个范围,因为北纬南纬加起来180°,所以纬度范围的取值应为0-180。同理,经度范围的取值范围为0-360。

通过上面的介绍,我们举个例子,将北京市设为地图的中心区域,并且比例设置为显示北京大小。通过百度,首先知道北京市界的地理坐标为:北纬39”26’至41”03’,东经115”25’至 117”30’。北京市区坐标为:北纬39.9”,东经116. 3”。代码如下:

mapView.region=MKCoordinateRegionMake(CLLocationCoordinate2DMake(39.26, 116.3), MKCoordinateSpanMake(1.8, 2.05));运行后可以看到,北京市基本上是在地图中心的,效果如下:

注意:MKCoordinateSpan的显示范围是取决于大的一边的,比如如果我们这样写:

MKCoordinateSpanMake(1.8, 360);最后依然会显示整个世界地图。

– (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

这个方法可以在设置后给地图加上动画效果

@property(nonatomic) CLLocationCoordinate2D centerCoordinate;

– (void)setCenterCoordinate:(CLLocationCoordinate2D)coordinate animated:(BOOL)animated;

设置地图的中心点位置,并附带动画效果

4、坐标转换方法- (CGPoint)convertCoordinate:(CLLocationCoordinate2D)coordinate toPointToView:(UIView *)view;

将经纬度转换为视图上的坐标

– (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view;

将视图上的坐标转换为经纬度

– (CGRect)convertRegion:(MKCoordinateRegion)region toRectToView:(UIView *)view;

将地理显示的区域转换为视图上的坐标区域

– (MKCoordinateRegion)convertRect:(CGRect)rect toRegionFromView:(UIView *)view; 将视图上的坐标区域转换为地理区域

5、MKMapView常用方法和属性@property(nonatomic, getter=isZoomEnabled) BOOL zoomEnabled;

设置是否允许捏合手势进行地图缩放

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled;

@property(nonatomic, getter=isRotateEnabled) BOOL rotateEnabled;

@property (nonatomic, getter=isPitchEnabled) BOOL pitchEnabled;

@property (nonatomic) BOOL showsPointsOfInterest;

设置是否显示兴趣点,例如学校,医院等

@property (nonatomic) BOOL showsBuildings;

设置是否显示建筑物轮廓,只在标准的地图中有效

@property (nonatomic) BOOL showsUserLocation;

@property (nonatomic) MKUserTrackingMode userTrackingMode;

– (void)setUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated;

设置更新用户位置的模式,当显示用户位置设置为YES,这个方法也设置了后,地图框架为我们直接集成了定位,地图上就会显示我们的位置,模式的枚举如下:

typedef NS_ENUM(NSInteger, MKUserTrackingMode) {    MKUserTrackingModeNone = 0, // 不跟踪用户位置    MKUserTrackingModeFollow, // 跟踪用户位置    MKUserTrackingModeFollowWithHeading, // 当方向改变时跟踪用户位置}

@property (nonatomic, readonly) MKUserLocation *userLocation;

@property (nonatomic, readonly, getter=isUserLocationVisible) BOOL userLocationVisible;

– (void)addAnnotation:(id )annotation;

– (void)addAnnotations:(NSArray *)annotations; 在地图上添加一组标注 – (void)removeAnnotation:(id )annotation;

– (void)removeAnnotations:(NSArray *)annotations;

@property (nonatomic, readonly) NSArray *annotations;

– (MKAnnotationView *)viewForAnnotation:(id )annotation;

– (MKAnnotationView *)dequeue

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注