重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
列出关键几点:
创新互联专注于企业成都全网营销、网站重做改版、云龙网站定制设计、自适应品牌网站建设、H5技术、商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为云龙等各大城市提供网站开发制作服务。
1. 百度上注册开发者账号,申请app AK,下载sdk
2. 加入sdk文件到代码中
3. appDelegate 中注册:
1)首先 #import"BMapKit.h"
2)didFinishLaunchingWithOptions方法中加入下面代码
// 要使用百度地图,请先启动BaiduMapManager
_mapManager = [[BMKMapManageralloc]init];
BOOL ret = [_mapManagerstart:@"mG6DBmXxsgFjc4CMB3ruX7Gr"generalDelegate:self];
if (!ret) {
NSLog(@"baidu map api: ---------- ------manager start failed!");
}
3)applicationWillResignActive方法中加入下面代码
[BMKMapViewwillBackGround];//百度地图api
4)applicationDidBecomeActive方法中加入下面代码
[BMKMapView willBackGround];// 百度地图api
5)AppDelegate实现代理 BMKGeneralDelegate
//代理方法
- (void)onGetNetworkState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------联网成功");
}
else{
NSLog(@"baidu map api: ---------- ------onGetNetworkState %d",iError);
}
}
//代理方法
- (void)onGetPermissionState:(int)iError
{
if (0 == iError) {
NSLog(@"baidu map api: ---------- ------授权成功");
}
else {
NSLog(@"baidu map api: ---------- ------onGetPermissionState %d",iError);
}
}
4 Build Settings - Other Linker Flags 去掉 -all_load
这个是为了解决问题: duplicate symbols for architecture armv7
5. 定位代码
- (void)viewDidLoad {
[superviewDidLoad];
//设置定位精确度,默认:kCLLocationAccuracyBest
//[BMKLocationServicesetLocationDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
//指定最小距离更新(米),默认:kCLDistanceFilterNone
//[BMKLocationServicesetLocationDistanceFilter:100.f];
// 利用百度地图api定位
//初始化BMKLocationService
_locService = [[BMKLocationServicealloc]init];
_locService.delegate =self;
//启动LocationService
[_locServicestartUserLocationService];
对应代理BMKLocationServiceDelegate
// 代理方法
#pragma mark - BMKLocationServiceDelegate
//实现相关delegate处理位置信息更新
//处理方向变更信息
- (void)didUpdateUserHeading:(BMKUserLocation *)userLocation
{
//NSLog(@"heading is %@",userLocation.heading);
}
//处理位置坐标更新
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
// NSLog(@"定位经纬度: lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
//[GlobalsetCurrentPosition:userLocation.location.coordinate];
}
[BMKMapView willBackGround];// 百度地图api
参考网站
前言
在ios上边使用地图库的同学肯定遇到过这样的问题:吹出框只能设置title和subtitle和左右的view,不管是百度地图还是高德地图还是自带的google地图,只提供了这四个属性,如果想添加更多的view,只能自定义。可是,类库只能看到.h文件,.m都看不到,这让新手比较蛋疼,庞大的地图类库一时半会摸不着头脑,从头再学还需要时间,本文就教大家快速制作一个属于自己的 CalloutView!等你一步一步调通后,再回过头来使用系统自带的方法设置callout,就会领悟这个过程。
正文
Xcode版本:4.6.1
SDK版本:6.0
百度地图版本:1.2.2(关于地图不必纠结,无论是百度还是高德还是google都是基于系统的MapKit,都是一样的)
demo模式:非ARC,使用storyboard。
demo资源:
Step1
创建demo,并添加百度地图的静态类库,helloword能显示mapview
关于这一步我专门写了教程,这里就不再赘述,同样,关于如何使用自带的BMKPointAnnotation添加一个marker,我也不再说了,如果连这个你都不会,那么先去官网看一下基本教程。
Step2
实现三个委托方法:
这个方法类似tableview添加cell,都是创建annotation
这个方法在点击地图marker时所触发(并显示callout)
原理:地图上的marker是在viewForAnnoation里创建的,同时也会隐含的为我们创建一个CalloutView,就是自带的吹出框,只是我们看不到源码。其实这个吹出框(CalloutView)也是一个annotation,也会在viewForAnnotation里被创建,他的坐标应该和这个点的marker坐标一样,只要明白了这一点,就行了,marker和吹出框是两个不同的annotation,他们有同样的coordinate。
Step3
自定义一个Annotation,为了简单方便,我就直接继承了mapview自带的BMKPointAnnotation,这是一个经典的
(void)longPress:(UIGestureRecognizer*)gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateBegan){ //这个状态判断很重要
//坐标转换
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
//这里的touchMapCoordinate.latitude和touchMapCoordinate.longitude就是想要的经纬度,
NSLog(@"%f",touchMapCoordinate.latitude);
NSLog(@"%f",touchMapCoordinate.longitude);
//30.264998 120.122538 30.285012 120.117989
LocationObject *aLocationObject = [[LocationObject alloc]initWithTitle:@"hello" latitue:touchMapCoordinate.latitude longitude:touchMapCoordinate.longitude];
aLocationObject._subTitleString = @"world";
NSMutableArray *_mapAnnotations = [[NSMutableArray alloc]initWithCapacity:1];
[_mapAnnotations addObject:aLocationObject];
[self.mapView addAnnotations:_mapAnnotations ];
[_mapAnnotations release];
[aLocationObject release];
}
}