IOS百度地图视角跳到用户当前位置
IOS百度地图开发实时路况
IOS开发百度地图自动导航
- (void)viewDidLoad {
_cacheAnnotationMDic=[[NSMutableDictionary alloc]init];
// 添加一个PointAnnotation
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
CLLocationCoordinate2D coor;
coor.latitude = 39.915;
coor.longitude = 116.404;
annotation.coordinate = coor;
annotation.title = @"test";
annotation.subtitle = @"this is a test!";
[mapView addAnnotation:annotation];
BMKPointAnnotation* annotation1 = [[BMKPointAnnotation alloc]init];
CLLocationCoordinate2D coor1;
coor1.latitude = 41.015;
coor1.longitude = 116.404;
annotation1.coordinate = coor1;
annotation1.title = @"test1";
annotation1.subtitle = @"this is a test!";
[mapView addAnnotation:annotation1];
}
//当选中一个annotation views时,调用此接口
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view
{
NSLog(@"选中一个annotation views:%f,%f",view.annotation.coordinate.latitude,view.annotation.coordinate.longitude);
}
//当取消选中一个annotation views时,调用此接口
- (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view{
NSLog(@"取消选中一个annotation views");
}
//*在地图View将要启动定位时,会调用此函数
- (void)mapViewWillStartLocatingUser:(BMKMapView *)mapView
{
NSLog(@"地图View将要启动定位");
}
- (void)viewWillAppear:(BOOL)animated
{
// 设置mapView的Delegate
mapView.delegate = self;
}
// Override
////根据anntation生成对应的View
//- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
//{
// if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
// BMKPinAnnotationView *newAnnotation = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
// newAnnotation.pinColor = BMKPinAnnotationColorPurple;
// newAnnotation.animatesDrop = YES;
// newAnnotation.draggable = YES;
//
// return newAnnotation;
// }
// return nil;
//}
//原理类似 UITableView 循环委托加载 CellforRowWithIndexPath
- (BMKAnnotationView *)mapView:(BMKMapView *)view viewForAnnotation:(id <BMKAnnotation>)annotation
{
NSLog(@"aaaaaaaaaaaaaaaaaaaaaaaaaa");
static NSString *AnnotationViewID = @"annotationViewID";
BMKAnnotationView *annotationView = [view dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
if (annotationView == nil) {
annotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
((BMKPinAnnotationView*)annotationView).animatesDrop = YES;
//气泡框左侧显示的View,可自定义
UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeCustom];
[selectButton setFrame:(CGRect){260,0,50,40}];
[selectButton setTitle:@"确定" forState:UIControlStateNormal];
annotationView.rightCalloutAccessoryView =selectButton;//气泡框右侧显示的View 可自定义
[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:@"test1"]) {
((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;
}
-(void)Location{
NSLog(@"点击气泡上的确定按钮");
}
//当mapView新添加annotation views时,调用此接口
- (void)mapView:(BMKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
NSLog(@"mapView新添加annotation views");
}
//*在地图View停止定位后,会调用此函数
- (void)mapViewDidStopLocatingUser:(BMKMapView *)mapView
{
NSLog(@"地图View停止定位");
}
//当点击annotation view弹出的泡泡时,调用此接口
- (void)mapView:(BMKMapView *)mapView annotationViewForBubble:(BMKAnnotationView *)view
{
NSLog(@"点击annotation view弹出的泡泡");
}
//*定位失败后,会调用此函数
- (void)mapView:(BMKMapView *)mapView didFailToLocateUserWithError:(NSError *)error
{
NSLog(@"定位失败");
}
![IOS开发百度地图API分享-用点生成路线,导航,气泡响应 IOS开发百度地图API分享-用点生成路线,导航,气泡响应](https://i-blog.csdnimg.cn/blog_migrate/236285149bfe0f21c43676a26c20ab98.jpeg)
搜索附近的宾馆,停车场,加油站等等都是用以下代码实现
- (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];
BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];
item.coordinate = poi.pt;
item.title = poi.name;
[_mapView addAnnotation:item];
[item release];
}
}
}
{
NSArray* array = [NSArray arrayWithArray:_mapView.annotations];
[_mapView removeAnnotations:array];
array = [NSArray arrayWithArray:_mapView.overlays];
[_mapView removeOverlays:array];
BOOL flag = [_search poiSearchInCity:_cityText.text withKey:_keyText.text pageIndex:0];
if (!flag) {
NSLog(@"search failed!");
}
}
//更新坐标
-(void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation{
self._latitude = userLocation.coordinate.latitude;
self._longitude = userLocation.coordinate.longitude;
if (!testcheckMap) {
//给view中心定位
BMKCoordinateRegion region;
region.center.latitude = userLocation.location.coordinate.latitude;
region.center.longitude = userLocation.location.coordinate.longitude;
region.span.latitudeDelta = 0.02;
region.span.longitudeDelta = 0.02;
_mapView.region = region;
//加个当前坐标的小气泡
[_search reverseGeocode:userLocation.location.coordinate];
}
}
//定位停止(最好不要停止,不然没有办法得到实施路况~)
-(void)mapViewDidStopLocatingUser:(BMKMapView *)mapView{
//添加圆形覆盖
// BMKCircle* circle = [BMKCircle circleWithCenterCoordinate:mapView.centerCoordinate radius:1000];
// [mapView addOverlay:circle];
//标记我的位置
BMKUserLocation *userLocation = mapView.userLocation;
userLocation.title = @"我的位置";
[_mapView addAnnotation:userLocation];
[mapView setShowsUserLocation:YES];
}
将百度地图视角切换到当前坐标(可以直接在位置移动后的方法里面写!)
-(void)Region{
CLLocationCoordinate2D coor;
coor.latitude = self._latitude;
coor.longitude = self._longitude;
NSDictionary *tip = BMKBaiduCoorForWgs84(coor);
CLLocationCoordinate2D coor1= BMKCoorDictionaryDecode(tip);
BMKCoordinateRegion viewRegion = BMKCoordinateRegionMake(coor1, BMKCoordinateSpanMake(0.05,0.05));
BMKCoordinateRegion adjustedRegion = [_mapView regionThatFits:viewRegion];
[_mapView setRegion:adjustedRegion animated:YES];
}
清除地图上所有痕迹和路线
-(void)clereOldYJDH{
NSArray* array = [NSArray arrayWithArray:_mapView.annotations];
[_mapView removeAnnotations:array];
array = [NSArray arrayWithArray:_mapView.overlays];
[_mapView removeOverlays:array];
[self Region];
}
----------------------------------以下是根据经纬度得到街道地址-----------------------------
- (void)viewDidLoad
{
[super viewDidLoad];
mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 92, 320, 388)];
[self.view addSubview:mapView];
mapView.delegate = self;
[mapView setShowsUserLocation:YES];//显示定位的蓝点儿
_search = [[BMKSearch alloc]init];//search类,搜索的时候会用到
_search.delegate = self;
fromeText.text=@”新中关”;
CGSize screenSize = [[UIScreen mainScreen] currentMode].size;
if ((fabs(screenSize.width – 640.0f) < 0.1)
&& (fabs(screenSize.height – 960.0f) < 0.1))
{
isRetina = TRUE;
}
pathArray=[[NSMutableArray array] retain]; //用来记录路线信息的,以后会用到
}