_____陌然 2014-04-01 08:30 采纳率: 0%
浏览 12594

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);

  • 写回答

1条回答 默认 最新

  • 陆尘风 2014-05-28 02:43
    关注

    BMKMapPoint* pointArray = (BMKMapPoint *)malloc(sizeof(CLLocationCoordinate2D) * _locationPoint.count);试试

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘