业务需求 :给别人发送当前位置功能
点击查看别人的位置信息,
功能需求 :
1. 点击发送位置按钮, 进入地图界面. 定位到自己当前的位置
2. 定位到自己当前位置的大头针, 不是地图自带的小圆点, 而是自己的头像.
3. 移动屏幕, 大头针始终在屏幕中心. 当停止移动时, 将大头针设置为当前位置.
4. 获得大头针所在位置附近的商圈, 在列表中显示.
5. 点击列表中的位置信息, 大头针跟着移动.
6. 点击定位按钮, 大头针回到自己当前位置
7. 以上所有移动地图的操作 都要保证大头针始终在屏幕中心.
8. 查看别人发送的位置, 别人的位置需要显示头像, 我的位置显示默认小蓝点, 默认显示别人的位置, 点击定位按钮后,回到我的位置.
下面介绍功能实现
// 开始定位 会调用代理 didUpdateBMKUserLocation:- (IBAction)startLocation:(id)sender{ [_locService startUserLocationService]; // 这就话是重点 _mapView.showsUserLocation = NO;//先关闭显示的定位图层 _mapView.userTrackingMode = BMKUserTrackingModeNone;//设置定位的状态 _mapView.showsUserLocation = YES;//显示定位图层}- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{ [_mapView updateLocationData:userLocation]; [_mapView setCenterCoordinate:userLocation.location.coordinate animated:YES]; }
获得自己经纬度的方法, 请看功能实现1.
//1 . 隐藏默认小蓝点. 在viewWillAppear 中实现BMKLocationViewDisplayParam *disPlayParamter= [BMKLocationViewDisplayParam new]; disPlayParamter.isRotateAngleValid = NO; disPlayParamter.isAccuracyCircleShow = NO; disPlayParamter.locationViewImgName = @"透明图片"; [_mapView updateLocationViewWithParam:disPlayParamter];// 2. 添加大头针 // BMKPointAnnotation* pointAnnotation;声明这个属性, 怎么写不说了. - (void)addPointAnnotationWithLatitude:(double)latitude longitude:(double)longitude{ if (pointAnnotation == nil) { pointAnnotation = [[BMKPointAnnotation alloc]init]; pointAnnotation.title = @"test"; pointAnnotation.subtitle = @"此Annotation可拖拽!"; } CLLocationCoordinate2D coor; coor.latitude = latitude; coor.longitude = longitude; pointAnnotation.coordinate = coor; [_mapView addAnnotation:pointAnnotation];}// 大头针的代理// MyAnimatedAnnotationView 这个类是一个自定义大头针的类, 要继承BMKAnnotationView. 就当他是一个View 随便折腾去吧. - (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation{ if (annotation == pointAnnotation) { MyAnimatedAnnotationView *annotationView = (MyAnimatedAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:tpMapBaiduViewID]; if (!annotationView) { annotationView = [[MyAnimatedAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:tpMapBaiduViewID]; annotationView.canShowCallout = NO;//在点击大头针的时候会弹出那个黑框框 annotationView.draggable = NO;//禁止标注在地图上拖动 } [annotationView addAvatarUrl:self.provider.paramters.avatarUrl]; return annotationView; } return nil;}
- (void)mapViewDidFinishRendering:(BMKMapView *)mapView{ 在这里添加ViewA的动画}
这样就还有有个问题. 功能需求二添加了一个大头针, 这里有添加了一个ViewA.不就有两个标记了吗? 对的, 因为这个需求, 我把功能二中天天大头针的方法注释了. 因为第一次加载地图成功后也会调用这个方法, 所以, 看上去好像大头针扎在了 定位的地方一样.
在viewWillAppear中调用// 制定地图中心在屏幕中显示的位置, 你需要将viewA的中心坐标设置上去. [_mapView setMapCenterToScreenPt:CGPointMake(self.view.width * 0.5, self.view.height * 0.3)];
// 获取位置信息-(IBAction)reverseGeoShortUrlShareWithLatitude:(double)latitude longitude:(double)longitude{ //坐标 NSString* _coordinateXText = [NSString stringWithFormat:@"%.6f", longitude]; NSString* _coordinateYText = [NSString stringWithFormat:@"%.6f", latitude]; pt = (CLLocationCoordinate2D){[_coordinateYText floatValue], [_coordinateXText floatValue]}; BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init]; reverseGeocodeSearchOption.reverseGeoPoint = pt; BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption]; if(flag) { NSLog(@"反geo检索发送成功"); } else { NSLog(@"反geo检索发送失败"); }}//获取完毕后后调用代理-(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{}
[_mapView setCenterCoordinate:CLLocationCoordinate2DMake(latitude, longitude) animated:YES];
// 定位按钮点击了- (IBAction)locationBtnDidClick:(id)sender { [self startFollowing:nil]; [_mapView setCenterCoordinate:_locService.userLocation.location.coordinate animated:YES];}// 跟随态-(IBAction)startFollowing:(id)sender{ _mapView.showsUserLocation = NO; _mapView.userTrackingMode = BMKUserTrackingModeFollow; _mapView.showsUserLocation = YES;}
//默认显示别人的位置. //这两行代码有顺序要求. [_mapView setCenterCoordinate:CLLocationCoordinate2DMake(self.provider.paramters.latitudeD, self.provider.paramters.longitudeD) animated:YES]; [self startLocation:nil];
好的功能介绍完毕. 如有错误, 请多多指教, 邮箱 2711056454@qq.com 谢谢.
拉起第三方地图 很好的文章http://www.jianshu.com/p/183f66da9d9c
联系客服