折线未从用户位置绘制(蓝点)

时间:2013-12-03 12:03:49

标签: ios objective-c mkmapview mapkit mkpolyline

- (void)viewDidLoad
{
    [super viewDidLoad];

    CLLocationCoordinate2D currentLocation;
    currentLocation.latitude = self.mapView.userLocation.location.coordinate.latitude;
    currentLocation.longitude = self.mapView.userLocation.location.coordinate.longitude;

    CLLocationCoordinate2D otherLocation;
    otherLocation.latitude = [lati doubleValue];
    otherLocation.longitude = [longi doubleValue];

    MKPointAnnotation *mka = [[MKPointAnnotation alloc]init];
    mka.Coordinate = otherLocation;
    mka.title = @"!";
    [self.mapView addAnnotation:mka];

    self.mapView.delegate = self;

    MKMapPoint *pointsArray = malloc(sizeof(CLLocationCoordinate2D));
    pointsArray[0]= MKMapPointForCoordinate(currentLocation);
    pointsArray[1]= MKMapPointForCoordinate(otherLocation);
    routeLine = [MKPolyline polylineWithPoints:pointsArray count:2];
    free(pointsArray);

    [self.mapView addOverlay:routeLine];
}

我使用此代码显示坐标之间的折线,但我得到这条直线。如何解决这个问题。

enter image description here

2 个答案:

答案 0 :(得分:2)

根据您的屏幕截图显示该行不是从用户位置开始,但显然位于东部的某个偏远位置(可能是非洲沿海大西洋的0,0)...

您可能遇到的问题是您正在尝试阅读viewDidLoad中的userLocation坐标,但地图可能尚未获取该位置,在这种情况下您将从0,0进行绘图。

确保showsUserLocationYES并阅读userLocation并改为在didUpdateUserLocation委托方法中创建折线。

还要记住,如果设备正在移动或操作系统获得更好的位置,则可以多次调用didUpdateUserLocation。如果您没有考虑它,可能会导致绘制多条线(在您在那里移动叠加层之后)。您可以在添加新叠加层之前删除现有叠加层,或者如果已经完成叠加则不添加叠加层。

<小时/> 此外,请注意以下内容:

发布的代码试图在两个点之间画一条线但是:

MKMapPoint *pointsArray = malloc(sizeof(CLLocationCoordinate2D));

仅为一个点分配空间。

另一个问题是它使用CLLocationCoordinate2D而不是MKMapPoint的大小,这是你在数组中放置的(虽然这在技术上不会产生问题,因为这两个结构碰巧大小相同)。

尝试将该行更改为:

MKMapPoint *pointsArray = malloc(sizeof(MKMapPoint) * 2);


请注意,您也可以使用polylineWithCoordinates方法,这样就不必将CLLocationCoordinate2Ds转换为MKMapPoints。

答案 1 :(得分:0)

请改用MKDirections。 tutorial is here