百度地图 轨迹回放 android,求助!关于百度地图轨迹回放功能的实现

我是搞IOS开发的新手,刚刚带我的人给了我一个任务,就是把获取到的定位记录集,转化成地图上的点,然后按时间顺序,每隔1s显示一个大头针,并把两点连成线。其实显示效果就是像动画一样,把历史轨迹播放出来。

我现在纠结的是把点按顺序显示出来,我在循环中添加[NSThread sleepForTimeInterval:1.0],但它并没有出现预期的效果,而是当我讲所有的大头针都加到地图中,才开始调用mapView:viewForAnnotation:来显示。。。苦思不得其解,希望大家能够帮帮忙,小女子万分感谢!

第一次发帖,可能问题描述的不够清楚,大家可以给我提下意见哈,谢谢了!!!

代码如下:

-(void)getHistoryLocation

{

NSString *tempSessionId = [ESLoginParser getSessionId];

NSString *tempMobileNumber = m_Userinfo.mgrUserMobile;

NSString *url = TRACKBACK_URL(tempSessionId, tempMobileNumber, mDateLabel.text);

[ApplicationDelegate showWaitView:@"正在获取记录,请稍候..."];

[ApplicationDelegate.esNetworkEngine get:url

params:nil onCompletion:^(NSString* retString){

[ApplicationDelegate hideWaitView];

//清空原来的覆盖物

NSArray* annotations = [NSArray arrayWithArray:_mapView.annotations];

[_mapView removeAnnotations:annotations]; //会把“我的位置”清除

NSArray* overlays = [NSArray arrayWithArray:_mapView.overlays];

for (BMKShape* overlay in overlays) {

if([overlay isKindOfClass:[BMKPolyline class]]){

[_mapView removeAnnotation:overlay];

}

}

if([retString rangeOfString:@""].length > 0)

{ //分析返回结果

ESLocationPointParser *parser = [[ESLocationPointParser alloc] init];

NSArray *pointList = [parser parseResponse:retString];

LngLatConverter * llc = [[LngLatConverter alloc] init];

[llc translate:pointList converteType:GPS2BAIDU onCompletion:^(ESConverteResult *converteResult) {

//

if(converteResult.resultCode == SUCCESS){

if(pointList.count == 0){

[gutil alert:@"没有找到定位记录"];

return;

}

}

double minLatitude = 999.0f;

double minLongitude = 999.0f;

double maxLatitude = 0.1f;

double maxLongitude = 0.1f;

int i = 0;

for (ESLocationPoint *point in pointList){

NSLog(@"%d",i);

CLLocationCoordinate2D coordinate = {[point.latitude doubleValue], [point.longitude doubleValue]};

//大头针信息

ESMarkerAnnotation* item = [[ESMarkerAnnotation alloc] init];

item.coordinate = coordinate;

item.title = point.updateTime; //point.address;

if(point.stayTime.length == 0){

item.subtitle = @"停留时间:1分钟";

}else{

item.subtitle = [NSString stringWithFormat:@"停留时间:%@分钟", point.stayTime];

}

//地图范围

if(coordinate.latitude < minLatitude){

minLatitude = coordinate.latitude;

}

if(coordinate.longitude < minLongitude){

minLongitude = coordinate.longitude;

}

if(coordinate.latitude > maxLatitude){

maxLatitude = coordinate.latitude;

}

if(coordinate.longitude > maxLongitude){

maxLongitude = coordinate.longitude;

}

if(i > 1){

BMKCoordinateRegion region;

region.center.latitude  = (minLatitude + maxLatitude)/2;

region.center.longitude = (minLongitude + maxLongitude)/2;

region.span.latitudeDelta = (maxLatitude-minLatitude);

region.span.longitudeDelta = (maxLongitude - minLongitude);

[_mapView setRegion:region animated:YES];

}else{ // == 1

CLLocationCoordinate2D coordinate = {minLatitude, minLongitude};

[_mapView setCenterCoordinate:coordinate animated:YES];

}

//添加大头针

[_mapView addAnnotation:item];

[NSThread sleepForTimeInterval:1.0];

//显示刚定位信息

if(myLocationAnnotation != nil){

[_mapView addAnnotation:myLocationAnnotation];

}

i++;

}

}];

}else{

[gutil alert:@"返回结果不对"];

}

}

onError:^(NSError* error){

[ApplicationDelegate hideWaitView];

[gutil alert:[error localizedDescription]];

}];

}

- (BMKAnnotationView*) mapView: (BMKMapView*) mapView viewForAnnotation: (id) annotation{

NSLog(@"tt");

if([annotation isKindOfClass:[ESMarkerAnnotation class]]){

BMKAnnotationView* newAnnotation=[[BMKAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: annotation.title];

newAnnotation.canShowCallout=YES;

newAnnotation.image=[UIImage imageNamed:@"map_mark"];

return newAnnotation;

}else if ([annotation isKindOfClass:[ESMyLocationAnnotation class]]){

BMKAnnotationView* newAnnotation=[[BMKAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier: annotation.title];

newAnnotation.canShowCallout=YES;

newAnnotation.image=[UIImage imageNamed:@"map"];

return newAnnotation;

}

return nil;

}

分享至:

90ed4b13fe016cebd9fe3df2ae3a899b.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值