地图

地图: 

六大经典应用之一

lbs 基于位置的服务 

 

 

三个经典地图:

高德 百度 谷歌

(谷歌面向世界,百度高德只能在国内用,核心在国内城市,现在苹果和高德合作,内嵌高德,所以一下官方库操作的是高德地图的)

***

 

 

做地图必备两个系统库:

CoreLocation.framework

MapKit.framework

(若是百度地图的SDK,则不需要MapKit这个库)

 

 

***************

高德地图

****************

#import 

 

@interface MKMapView UIView <</SPAN>NSCoding>

地图视图

默认支持 — 平移手势、缩放手势、旋转手势

 

 

结构体:

MKCoordinateRegion

经纬度结构体

CLLocationCoordinate2D

经纬度

MKCoordinateSpan

地图精度  

 

结构体初始化赋值可以用{}    不是初始化就要用对应的make方法

 

例:

CLLocationCoordinate2D coodinate {22,113};

这个值可以通过谷歌地图去找一个地址的经纬度

MKCoordinateSpan span {0.05,0.05};

值越小越精确

 

经纬度:

@property (nonatomicMKCoordinateRegion region;

MKMapView的属性  地图当前显示的经纬度与精度

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

 

 

地图类型:

@property (nonatomicMKMapType mapType;

MKMapView的属性  地图当前显示的类型

分三种 "普通""卫星""混合"

对应一下三个枚举值:

MKMapTypeStandard 0,

MKMapTypeSatellite,

MKMapTypeHybrid

 

 

 

大头针:

定位  直观  一目了然

创建一个类,遵守以下协议

@protocol MKAnnotation <</SPAN>NSObject>

这三个属性只读 要修改三个属性的值

 只能初始化时做,所以

重写构造函数

(id)initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString *)title subtitle:(NSString *)subtitle

 

三个属性(_coordinate,_title,_subtitle)

第一个属性是必选的   后两个用到了  所以要写上三个属性

 然后就完成了大头针的定制

 

(void)addAnnotation:(id <</SPAN>MKAnnotation>)annotation;

(void)removeAnnotations:(NSArray *)annotations;

@property (nonatomicreadonlyNSArray *annotations;

mv的属性和方法  操作大头针的

 

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

point换成坐标

 

地理位置编码:

通过经纬度,获取当前作用点的详细地理位置信息

@interface CLGeocoder NSObject

编码器(还有一个反编码器)

 

@interface CLLocation NSObject <</SPAN>NSCopyingNSSecureCoding>

面向对象的封装  封装了经纬度 

@property(readonlynonatomicCLLocationCoordinate2D coordinate;

封装的经纬度属性

 

 

(void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

CLGeocoder的方法

第一个参数是一个位置的封装对象

第二个参数是一个block

两个参数

第一个参数是CLPlacemark对象的数组  一般取第一个   这个CLPlacemark里有很多属性   可以看到位置的信息

 

@interface CLPlacemark NSObject <</SPAN>NSCopyingNSSecureCoding>

 

 

 

范例:

[gc reverseGeocodeLocation:lc completionHandler:^(NSArray *placemarks, NSError *error) {

            CLPlacemark *pm placemarks[0];

            NSLog(@"%@"pm);

        }];

 

 

 

定位:

模拟器上没有GPS的模块

@interface CLLocationManager NSObject

 

@property(assignnonatomicid<</SPAN>CLLocationManagerDelegatedelegate;

代理

@property(assignnonatomicCLLocationAccuracy desiredAccuracy;

定位效果

@property(assignnonatomicCLLocationDistance distanceFilter;

设置什么定位距离

 

(void)startUpdatingLocation;

开始定位

(void)stopUpdatingLocation;

停止定位

定位很耗电   所以不能忘了停止

我觉得在定位成功或者失败的代理方法中写停止更好些 定位完就马上停止定位

 

@protocol CLLocationManagerDelegate<</SPAN>NSObject>

(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

定位成功的回调方法

第二个参数中有定位的位置信息  是一个数组

数组中放的是CLLocation对象

一般是取第0个对象  里面有

 

(void)locationManager:(CLLocationManager *)manager

didFailWithError:(NSError *)error;

定位失败的回调方法

 

@property (nonatomicBOOL showsUserLocation;

允许用户定位  MKMapView的属性

会给用户弹出一个弹窗

 

 

气泡定制:

MKMapView

@property (nonatomicassignid <</SPAN>MKMapViewDelegatedelegate;

 

@protocol MKMapViewDelegate <</SPAN>NSObject>

代理方法

(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<</SPAN>MKAnnotation>)annotation

这个是气泡定制的主要回调方法

cell差不多一样的原理

也支持复用

如果return nil  就能弹出气泡

@interface MKPinAnnotationView MKAnnotationView

 

@property (nonatomicBOOL canShowCallout;

把这个属性设为yes  也能弹出气泡

@property (nonatomicBOOL animatesDrop;

yes   大头针是从天上掉下来的

@property (nonatomicMKPinAnnotationColor pinColor;

只有三个颜色(红紫绿)

以上是大头针的常用三个属性

 

@property (retainnonatomicUIView *leftCalloutAccessoryView;

@property (retainnonatomicUIView *rightCalloutAccessoryView;

左右的附加视图

 

****

[annotation isKindOfClass:[MKUserLocation class]]

判断大头针是否在定位

一般定位的时候是没有气泡的

***

 

@interface MKAnnotationView UIView

个性化定制大头针使用

@interface MKPinAnnotationView MKAnnotationView

系统默认的大头针

这两个类是继承关系

pinColor  animatesDrop 这两个属性是特有的

如果设置了这两个属性  则下面这个图片的属性设置就会失效

@property (nonatomicretainUIImage *image;

这个属性会替换掉大头针

 

*******************************

百度地图

****************

baidu地图:

百度提供了一套sdk

百度地图的sdk

百度提供了官方的sdk  两套  一套模拟器 一套真机

可以把两个合成一个

在终端执行如下命令:

lipo -create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a -output libbaidumapapi.a

 

最新版本是2.3

在百度地图api上注册应用

注册应用需要工程的Bundle Identifyer

应用上架也是要用的

拿到ak   百度的sdk要用的

 

通过官方提供的Demo可以浏览sdk的功能

 

导入他的库BMK

需要加入6个第三方库

百度地图第三方库:

SystemConfiguration.framework

CoreLocation.framework

OpenGLES.framwork

MessageUI.framework

Security.framework

CoreGraphics.framework

 

 

BMapKit.h

 

BMKMapManager

百度map引擎

 

-(BOOL)start:(NSString*)key generalDelegate:(id<</SPAN>BMKGeneralDelegate>)delegate;

启动引擎

 

BMKMapView

百度地图的view

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值