【问题标题】:Polyline not drawing from user location (blue dot)折线未从用户位置绘制(蓝点)
【发布时间】:2013-12-19 11:35:01
【问题描述】:
- (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];
}

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

【问题讨论】:

  • 我根本不是 MapKit 方面的专家,但 2 点的折线不是直线吗?你期待什么结果?
  • @MartinR 我想连接这两点。
  • @S.J 那么你的问题是什么?它确实连接了两点!
  • 你想得到两点之间的driving路线吗?在 iOS 7 中,使用 MKDirections 提供多条路线的折线。使用该类有一些关于 SO 的答案。
  • 我想用折线连接当前位置和其他位置

标签: ios objective-c mkmapview mapkit mkpolyline


【解决方案1】:

根据您的屏幕截图,该线不是从用户位置开始,而是显然在东部的某个偏远位置(可能是非洲海岸外的大西洋中的 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。

【讨论】:

  • 您的另一个潜在问题是您正在尝试读取 viewDidLoad 中的 userLocation 坐标,但地图可能尚未获得位置,在这种情况下您将从 0,0 开始绘制。确保 showsUserLocation 为 YES 并读取 userLocation 并在 didUpdateUserLocation 委托方法中创建折线。
  • 非常感谢您的精彩回复,didUpdateUserLocation 委托方法完成了这项工作。请将其发布为答案,以便我投票并选择正确答案。
  • @S.J,这一个答案。另请记住,如果设备正在移动或操作系统获得更好的位置,则可以多次调用 didUpdateUserLocation。如果不考虑,这可能会导致绘制多条线。
【解决方案2】:

改用 MKDirections。 tutorial is here

【讨论】:

猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 2012-02-02
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
相关资源
最近更新 更多