- (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];
}
我使用此代码显示坐标之间的折线,但我得到这条直线。如何解决这个问题。
答案 0 :(得分:2)
根据您的屏幕截图显示该行不是从用户位置开始,但显然位于东部的某个偏远位置(可能是非洲沿海大西洋的0,0)...
您可能遇到的问题是您正在尝试阅读viewDidLoad
中的userLocation坐标,但地图可能尚未获取该位置,在这种情况下您将从0,0进行绘图。
确保showsUserLocation
为YES
并阅读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