您的位置:首页 > 其它

地图

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: