2013-12-03 4 views
2
- (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

+0

Я вообще не специалист в MapKit, но не является полилинией с 2 ​​точками прямой линии? Какой результат вы ожидаете? –

+0

@MartinR Я хочу соединить эти две точки. –

+0

@ S.J Итак, в чем проблема? он соединяет две точки! – Maulik

ответ

2

Основываясь на скриншоте, который показывает линия не начиная с местоположения пользователя, но, по-видимому на каком-то удаленном месте на восток (вероятно, 0,0, который находится в Атлантическом океане у побережья Африки). ..

Ваша потенциальная проблема заключается в том, что вы пытаетесь прочитать координаты userLocation в viewDidLoad, но карта, возможно, не получила местоположение, но в этом случае вы будете строить график из 0,0.

Удостоверьтесь, что showsUserLocation - YES и прочитайте имя пользователя и создайте полилинию в методе делегата didUpdateUserLocation.

Также помните, что didUpdateUserLocation может быть вызван несколько раз, если устройство движется или операционная система становится лучше. Это может привести к рисованию нескольких строк (после того, как вы переместили создание наложения), если вы не учтете его. Вы можете удалить существующие накладки перед добавлением нового или просто не добавлять наложение, если оно уже было выполнено.


Кроме того, обратите внимание на следующее:

код отправил пытается нарисовать линию между две точек, но это:

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

выделяет пространство только один точки.

Другая проблема заключается в том, что он использует размер CLLocationCoordinate2D вместо MKMapPoint, который является тем, что вы помещаете в массив (хотя это технически не создает проблему, потому что эти две структуры имеют одинаковый размер).

Попробуйте изменить эту строку:

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


Обратите внимание, что вы можете просто использовать метод polylineWithCoordinates, поэтому вам не придется конвертировать CLLocationCoordinate2Ds в MKMapPoints.

+1

Другая потенциальная проблема заключается в том, что вы пытаетесь прочитать координаты userLocation в viewDidLoad, но карта, возможно, не получила местоположение, но в этом случае вы будете составлять от 0,0. Убедитесь, что showUserLocation является YES и прочитайте userLocation и создайте полилинию в методе делегата didUpdateUserLocation. – Anna

+0

Большое вам спасибо за отличный ответ, didUpdateUserLocation delegate method выполнил эту работу. Пожалуйста, опубликуйте его как ответ, чтобы я мог проголосовать и выбрать правильный ответ. –

+1

@ S.J, Это _is_ ответ. Также помните, что didUpdateUserLocation можно вызывать несколько раз, если устройство движется, или ОС получает лучшее место. Это может привести к рисованию нескольких строк, если вы не учтете его. – Anna

0

Вместо этого используйте MKDirections. tutorial is here

+0

Я не пользуюсь ios7 –

+0

Итак, попробуйте использовать Google Maps Api Directions https://developers.google.com/maps/documentation/directions/ и создайте MKPolyline. Но вы можете использовать его только с картами Google по лицензии. – Slashik

 Смежные вопросы

  • Нет связанных вопросов^_^