开发者社区> 问答> 正文

关于IOS百度地图绘制行走轨迹 的问题

(void)viewDidLoad
 {
 [super viewDidLoad];
 // Do any additional setup after loading the view from its nib.

self.mapView = [[BMKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 520)];
 self.mapView.showsUserLocation = YES;
 [self.view addSubview:_mapView];
 [self configureRoutes];
 }


-(void)configureRoutes
 {
 // define minimum, maximum points定义最小值,最大值点
 BMKMapPoint northEastPoint;
BMKMapPoint southWestPoint;

BMKMapPoint* pointArr = new BMKMapPoint[_locationPoint.count];


// char*str=(char )malloc(8);
 就是卡死到这了!!!!! BMKMapPoint pointArray = malloc(sizeof(CLLocationCoordinate2D) * _locationPoint.count);
for(int idx = 0; idx < _locationPoint.count; idx++)
{
    CLLocation *location = [_locationPoint objectAtIndex:idx];
    CLLocationDegrees latitude  = location.coordinate.latitude;
    CLLocationDegrees longitude = location.coordinate.longitude;

    // create our coordinate and add it to the correct spot in the array 创建我们的坐标数组中,并将它添加到正确的位置
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude, longitude);
    BMKMapPoint point = BMKMapPointForCoordinate(coordinate);

    // if it is the first point, just use them, since we have nothing to compare to yet. 如果是第一点,只使用他们,因为我们没有比较
    if (idx == 0) {
        northEastPoint = point;
        southWestPoint = point;
    } else {
        if (point.x > northEastPoint.x)
            northEastPoint.x = point.x;
        if(point.y > northEastPoint.y)
            northEastPoint.y = point.y;
        if (point.x < southWestPoint.x)
            southWestPoint.x = point.x;
        if (point.y < southWestPoint.y)
            southWestPoint.y = point.y;
    }

    pointArr[idx] = point;
}
//表示路由的数据点
if (self.routeLine) {
    //在地图上移除已有的坐标点
    [self.mapView removeOverlay:self.routeLine];
}

self.routeLine = [BMKPolyline polylineWithPoints:pointArr count:_locationPoint.count];

// add the overlay to the map.覆盖添加到地图
if (nil != self.routeLine) {
    [self.mapView addOverlay:self.routeLine];
}

// clear the memory allocated earlier for the points,清楚点的早些时候分配的内存
free(pointArr);


}
(BMKOverlayView*)mapView:(BMKMapView )map viewForOverlay:(id)overlay { if ([overlay isKindOfClass:[BMKPolyline class]]) { BMKPolylineView polylineView = [[[BMKPolylineView alloc] initWithOverlay:overlay] autorelease]; polylineView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:1]; polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7]; polylineView.lineWidth = 3.0; return polylineView; } return nil; }

(void)mapView:(BMKMapView *)mapView didUpdateUserLocation:(BMKUserLocation *)userLocation
 {
 CLLocation *location = [[CLLocation alloc] initWithLatitude:userLocation.coordinate.latitude
 longitude:userLocation.coordinate.longitude];

// check the zero point检查零点
 if (userLocation.coordinate.latitude == 0.0f ||
 userLocation.coordinate.longitude == 0.0f)
 return;

// check the move distance检查移动的距离
 if (_locationPoint.count > 0) {
 CLLocationDistance distance = [location distanceFromLocation:_currentLocation];
 if (distance < 5)
 return;
 }

if (nil == _locationPoint) {
 _locationPoint = [[NSMutableArray alloc] init];
 }

[_locationPoint addObject:location];
 _currentLocation = location;

NSLog(@"points: +++++++++++++++++++++%@", _locationPoint);

[self configureRoutes];

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(userLocation.coordinate.latitude, userLocation.coordinate.longitude);
 [self.mapView setCenterCoordinate:coordinate animated:YES];


}

-(void)viewWillAppear:(BOOL)animated {
 [_mapView viewWillAppear];
 _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放

}

-(void)viewWillDisappear:(BOOL)animated {
 [_mapView viewWillDisappear];
 _mapView.delegate = nil; // 不用时,置nil

}
(void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } -(void)dealloc { [_mapView release]; [super dealloc]; }

@end

这是我参照高德地图的一个demo写的,到了动态分配内存的时候就卡那了,一直提示错误,
BMKMapPoint* pointArray = malloc(sizeof(CLLocationCoordinate2D) * _locationPoint.count);

展开
收起
爵霸 2016-03-17 10:04:29 3913 0
1 条回答
写回答
取消 提交回答
  • BMKMapPoint* pointArray = (BMKMapPoint *)malloc(sizeof(CLLocationCoordinate2D) * _locationPoint.count);
    2019-07-17 19:04:35
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
手淘iOS性能优化探索 立即下载
From Java/Android to Swift iOS 立即下载
深入剖析iOS性能优化 立即下载