地图
2016-02-19 09:28
162 查看
地图:
六大经典应用之一
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 (nonatomic) MKCoordinateRegion region;
MKMapView的属性 地图当前显示的经纬度与精度
- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;
地图类型:
@property (nonatomic) MKMapType 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 (nonatomic, readonly) NSArray *annotations;
mv的属性和方法 操作大头针的
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view;
将point换成坐标
地理位置编码:
通过经纬度,获取当前作用点的详细地理位置信息
@interface CLGeocoder : NSObject
编码器(还有一个反编码器)
@interface CLLocation : NSObject <</SPAN>NSCopying, NSSecureCoding>
面向对象的封装 封装了经纬度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
封装的经纬度属性
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
CLGeocoder的方法
第一个参数是一个位置的封装对象
第二个参数是一个block
两个参数
第一个参数是CLPlacemark对象的数组 一般取第一个 这个CLPlacemark里有很多属性 可以看到位置的信息
@interface CLPlacemark : NSObject <</SPAN>NSCopying, NSSecureCoding>
范例:
[gc reverseGeocodeLocation:lc completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *pm = placemarks[0];
NSLog(@"%@", pm);
}];
定位:
模拟器上没有GPS的模块
@interface CLLocationManager : NSObject
@property(assign, nonatomic) id<</SPAN>CLLocationManagerDelegate> delegate;
代理
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
定位效果
@property(assign, nonatomic) CLLocationDistance 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 (nonatomic) BOOL showsUserLocation;
允许用户定位 MKMapView的属性
会给用户弹出一个弹窗
气泡定制:
MKMapView
@property (nonatomic, assign) id <</SPAN>MKMapViewDelegate> delegate;
@protocol MKMapViewDelegate <</SPAN>NSObject>
代理方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<</SPAN>MKAnnotation>)annotation
这个是气泡定制的主要回调方法
跟cell差不多一样的原理
也支持复用
如果return nil 就能弹出气泡
@interface MKPinAnnotationView : MKAnnotationView
@property (nonatomic) BOOL canShowCallout;
把这个属性设为yes 也能弹出气泡
@property (nonatomic) BOOL animatesDrop;
yes 大头针是从天上掉下来的
@property (nonatomic) MKPinAnnotationColor pinColor;
只有三个颜色(红紫绿)
以上是大头针的常用三个属性
@property (retain, nonatomic) UIView *leftCalloutAccessoryView;
@property (retain, nonatomic) UIView *rightCalloutAccessoryView;
左右的附加视图
****
[annotation isKindOfClass:[MKUserLocation class]]
判断大头针是否在定位
一般定位的时候是没有气泡的
***
@interface MKAnnotationView : UIView
个性化定制大头针使用
@interface MKPinAnnotationView : MKAnnotationView
系统默认的大头针
这两个类是继承关系
pinColor 和 animatesDrop 这两个属性是特有的
如果设置了这两个属性 则下面这个图片的属性设置就会失效
@property (nonatomic, retain) UIImage *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
六大经典应用之一
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 (nonatomic) MKCoordinateRegion region;
MKMapView的属性 地图当前显示的经纬度与精度
- (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;
地图类型:
@property (nonatomic) MKMapType 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 (nonatomic, readonly) NSArray *annotations;
mv的属性和方法 操作大头针的
- (CLLocationCoordinate2D)convertPoint:(CGPoint)point toCoordinateFromView:(UIView *)view;
将point换成坐标
地理位置编码:
通过经纬度,获取当前作用点的详细地理位置信息
@interface CLGeocoder : NSObject
编码器(还有一个反编码器)
@interface CLLocation : NSObject <</SPAN>NSCopying, NSSecureCoding>
面向对象的封装 封装了经纬度
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
封装的经纬度属性
- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
CLGeocoder的方法
第一个参数是一个位置的封装对象
第二个参数是一个block
两个参数
第一个参数是CLPlacemark对象的数组 一般取第一个 这个CLPlacemark里有很多属性 可以看到位置的信息
@interface CLPlacemark : NSObject <</SPAN>NSCopying, NSSecureCoding>
范例:
[gc reverseGeocodeLocation:lc completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *pm = placemarks[0];
NSLog(@"%@", pm);
}];
定位:
模拟器上没有GPS的模块
@interface CLLocationManager : NSObject
@property(assign, nonatomic) id<</SPAN>CLLocationManagerDelegate> delegate;
代理
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
定位效果
@property(assign, nonatomic) CLLocationDistance 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 (nonatomic) BOOL showsUserLocation;
允许用户定位 MKMapView的属性
会给用户弹出一个弹窗
气泡定制:
MKMapView
@property (nonatomic, assign) id <</SPAN>MKMapViewDelegate> delegate;
@protocol MKMapViewDelegate <</SPAN>NSObject>
代理方法
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<</SPAN>MKAnnotation>)annotation
这个是气泡定制的主要回调方法
跟cell差不多一样的原理
也支持复用
如果return nil 就能弹出气泡
@interface MKPinAnnotationView : MKAnnotationView
@property (nonatomic) BOOL canShowCallout;
把这个属性设为yes 也能弹出气泡
@property (nonatomic) BOOL animatesDrop;
yes 大头针是从天上掉下来的
@property (nonatomic) MKPinAnnotationColor pinColor;
只有三个颜色(红紫绿)
以上是大头针的常用三个属性
@property (retain, nonatomic) UIView *leftCalloutAccessoryView;
@property (retain, nonatomic) UIView *rightCalloutAccessoryView;
左右的附加视图
****
[annotation isKindOfClass:[MKUserLocation class]]
判断大头针是否在定位
一般定位的时候是没有气泡的
***
@interface MKAnnotationView : UIView
个性化定制大头针使用
@interface MKPinAnnotationView : MKAnnotationView
系统默认的大头针
这两个类是继承关系
pinColor 和 animatesDrop 这两个属性是特有的
如果设置了这两个属性 则下面这个图片的属性设置就会失效
@property (nonatomic, retain) UIImage *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