本文转自http://blog.csdn.net/ysy441088327/article/details/8174276
在根据官方文档: http://developer.baidu.com/map/sdkiosdev-2.htm
进行一系列的引入后,还需要注意以下两个细节,否则编译和运行时都会出错:
1:让XCode 处于 Objective - C++ 混编模式进行编译: 最简单方法就是:随便更改工程文件中的某一个,将.m更改为.mm .
2:由于静态库里面包含类别条目(第四点),所以需要让工程支持类别的编译: Project->Build Settings->Other Linker Flags 添加值: -all_load
3:关于 setPaopaoView 警告 临时解决方案如下: 在 Other Linker Flags新增一个 -w
4:建议合并静态库
接下来开始记录具体用到的功能点:
第一个:成功载入地图后,开启定位功能,确认当前使用设备所在的地理位置,代码如下:
1: 开发定位功能,允许地图应用时时获取地理位置信息,并触发委托.
- _mapView.showsUserLocation = YES;
所触发的委托:
- - (void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation
- {
-
- }
2:如果以上委托被调用,说明位置信息已经成功获取,接下来需要将地图位置,移动到定位所在的位置,代码如下:
- NSLog(@"!latitude!!! %f",userLocation.location.coordinate.latitude);
- NSLog(@"!longtitude!!! %f",userLocation.location.coordinate.longitude);
-
- - (void)setMapRegionWithCoordinate:(CLLocationCoordinate2D)coordinate
- {
- BMKCoordinateRegion region;
- if (!_isSetMapSpan)
- {
- region = BMKCoordinateRegionMake(coordinate, BMKCoordinateSpanMake(0.05, 0.05));
- _isSetMapSpan = YES;
- [baiduMapView setRegion:region animated:YES];
- }
- _currentSelectCoordinate = coordinate;
- [baiduMapView setCenterCoordinate:coordinate animated:YES];
- }
执行 setCenterCoordinate:coordinate 以后开始移动,当移动完成后,会执行以下委托:
- - (void)mapView:(BMKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
- {
- [baiduMapView.annotations enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
- BMKPointAnnotation *item = (BMKPointAnnotation *)obj;
- if (item.coordinate.latitude == _currentSelectCoordinate.latitude && item.coordinate.longitude == _currentSelectCoordinate.longitude )
- {
- [baiduMapView selectAnnotation:obj animated:YES];
- *stop = YES;
- }
- }];
- }
注:0.05 表示显示区域的详细程度,设定的值最小,其显示的地图区域也就更详细,这个自己试试吧. 几句话也描述不清楚.
另外位置信息获取到以后,会不停的去获取,所以不需要使用的时候,把_mapView.showsUserLocation 设置为NO;
第二个:给指定的位置加入标注.
- BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
- item.coordinate = coordinate;
- item.title = titleString;
- item.subtitle = subTitleString;
- [baiduMapView addAnnotation:item];
注:为地图类引用 添加一个 标注 执行 addAnnotation 以后 baiduMapView为触发以下委托,此委托可以定制化标注视图
-
- - (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id )annotation
- {
- static NSString *AnnotationViewID = @"annotationViewID";
-
- BMKAnnotationView *annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
- if (annotationView == nil) {
- annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
- ((BMKPinAnnotationView*)annotationView).animatesDrop = YES;
- annotationView.leftCalloutAccessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_location.png"]];
-
- UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeCustom];
- [selectButton setFrame:(CGRect){260,0,50,annotationView.Help_height}];
- [selectButton setTitle:@"确定" forState:UIControlStateNormal];
- annotationView.rightCalloutAccessoryView =selectButton;
- [selectButton setBackgroundColor:[UIColor redColor]];
- [selectButton setShowsTouchWhenHighlighted:YES];
- [selectButton addTarget:self action:@selector(Location_selectPointAnnotation:) forControlEvents:UIControlEventTouchUpInside];
- }
-
- annotationView.rightCalloutAccessoryView.tag = _cacheAnnotationTag;
- [_cacheAnnotationMDic setObject:annotation forKey:[NSNumber numberWithInteger:_cacheAnnotationTag]];
- _cacheAnnotationTag++;
-
-
- if ([annotation.title isEqualToString:String_myLocation]) {
- ((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorGreen;
- [annotationView setDraggable:YES];
- [annotationView setSelected:YES animated:YES];
- }else
- {
- ((BMKPinAnnotationView *)annotationView).pinColor = BMKPinAnnotationColorRed;
- }
-
- annotationView.centerOffset = CGPointMake(0, -(annotationView.frame.size.height * 0.5));
- annotationView.annotation = annotation;
- annotationView.canShowCallout = TRUE;
- return annotationView;
- }
如果用户手动在地图中点击标注视图或者是 为 标注视图 BMKAnnotationView setSelect:YES 那么会触发以下委托:
- - (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view
- {
- _currentSelectCoordinate = view.annotation.coordinate;
- }
再当点击弹出的气泡框时亦会触发以下委托:
- - (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view;
如果要删除标注:
- NSMutableArray *annotationMArray = [[NSArray arrayWithArray:baiduMapView.annotations] mutableCopy];
- [baiduMapView removeAnnotations:annotationMArray];
第三个就是开始POI检索
初始化:
- baiduMapSearch = [[BMKSearch alloc] init];
- baiduMapSearch.delegate =self;
- [BMKSearch setPageCapacity:10];
开始搜索: 提供 搜索 城市 和关键字
- BOOL flag = [baiduMapSearch poiSearchInCity:_currentCity withKey:_searchKeywordString pageIndex:_searchPageIndex];
搜索委托
- - (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error
- {
- if (error == BMKErrorOk) {
- BMKPoiResult* result = [poiResultList objectAtIndex:0];
- for (int i = 0; i < result.poiInfoList.count; i++) {
- BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];
- }
- }
- }
- - (void)onGetPoiResult:(NSArray*)poiResultList searchType:(int)type errorCode:(int)error
- {
- if (error == BMKErrorOk) {
- BMKPoiResult* result = [poiResultList objectAtIndex:0];
- for (int i = 0; i < result.poiInfoList.count; i++) {
- BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];
- }
- }
- }
注:BMKPoiResult 里面展示当前搜索情况,如下:总共搜索到多少条数据,本次搜索到多少条数据,当前搜索到第几页等
BMKPoiInfo 是每一个搜索结果,里面有电话 ,地址,经纬度 等
最多附上相关资源包: http://www.kuaipan.cn/file/id_10716325655621670.htm
密码:QNWNaf