Должен ли я с MapKit использовать направления или создавать свои собственные наложения маршрутов?

Я абсолютный новичок в любом программировании, но пытаюсь учиться, создавая приложение для iOS, которое показывает (мой!) Маршрут на карте, используя MapKit. Вдоль маршрута есть аннотации с конкретной информацией.

У меня есть два вопроса.

  1. Что лучше / проще, попытаться использовать направления MapKit между аннотациями, чтобы MapKit отображал маршрут (я хочу) по дороге (мне нужно получить направления между каждой аннотацией, иначе маршрут не всегда будет тот, который я хочу показать !) или каким-то образом сделать наложение png-изображения моего маршрута и использовать это?

  2. Если окажется, что лучше использовать наложение, как мне его сделать и убедиться, что оно находится в нужном месте и масштабируется?

Я нашел много руководств о том, как добавить оверлей, но не могу найти много о том, как сделать его, который можно использовать в приложении.


person Wil-It    schedule 03.12.2015    source источник


Ответы (1)


Установка изображения на карте — плохой способ реализовать эту функцию. Для рисования пути Apple предоставила MKPolyline. Это позаботится обо всех ваших заботах о сохранении своей позиции в отношении фактора Zoom.

Пожалуйста, проверьте следующее для рисования полилинии

iPhone: как провести линию между двумя точками в MapKit?

or

http://pinkstone.co.uk/how-to-draw-an-mkpolyline-on-a-map-view/

В конечном итоге ваша цель будет состоять в том, чтобы каким-то образом получить широту промежуточных местоположений либо через встроенный API-интерфейс Direction, либо через API-интерфейсы третьей стороны, такие как Google Direction API.

Перечислите эти местоположения и нарисуйте полилинии на карте. Та же логика и вещи будут там, если вы в будущем попробуете с Google Maps. Только Мехтоды и Классы будут изменены.

- (void)drawLine {

    // remove polyline if one exists
    [self.mapView removeOverlay:self.polyline];

    // create an array of coordinates from allPins
    CLLocationCoordinate2D coordinates[self.allPins.count];
    int i = 0;
    for (Pin *currentPin in self.allPins) {
        coordinates[i] = currentPin.coordinate;
        i++;
    }

    // create a polyline with all cooridnates
    MKPolyline *polyline = [MKPolyline polylineWithCoordinates:coordinates count:self.allPins.count];
    [self.mapView addOverlay:polyline];
    self.polyline = polyline;

    // create an MKPolylineView and add it to the map view
    self.lineView = [[MKPolylineView alloc]initWithPolyline:self.polyline];
    self.lineView.strokeColor = [UIColor redColor];
    self.lineView.lineWidth = 5;

}

ИЗМЕНИТЬ

ЕСЛИ ВЫ ХОТИТЕ РИСОВАТЬ, ИСПОЛЬЗУЯ GOOGLE API и GOOGLE MAP

-(void)drawPathFrom:(CLLocation*)source toDestination:(CLLocation*)destination{    

    NSString *baseUrl = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/directions/json?origin=%f,%f&destination=%f,%f&sensor=true", source.coordinate.latitude,  source.coordinate.longitude, destination.coordinate.latitude,  destination.coordinate.longitude];

    NSURL *url = [NSURL URLWithString:[baseUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"Url: %@", url);
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if(!connectionError){
            NSDictionary *result        = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
            NSArray *routes             = [result objectForKey:@"routes"];
            if([routes isKindOfClass:[NSArray class]] && routes.count>0){
                NSDictionary *firstRoute    = [routes objectAtIndex:0];
                NSString *encodedPath       = [firstRoute[@"overview_polyline"] objectForKey:@"points"];

                GMSPolyline *polyPath       =  [GMSPolyline polylineWithPath:[GMSPath pathFromEncodedPath:encodedPath]];
                polyPath.strokeColor        = [UIColor blueColor];
                polyPath.strokeWidth        = 3.5f;
                polyPath.map                = _mapView;

            }
        }
    }];

}
person Mrug    schedule 03.12.2015
comment
Большое спасибо Mrug! Я предполагаю, что мне нужно использовать указания от Apple (или Google Map, если я буду использовать это), чтобы полилиния следовала за дорогой. Без направлений это просто прямая линия между двумя точками. Или вы имели в виду, что у меня должно быть столько точек, что ломаная будет следовать за дорогой? - person Wil-It; 04.12.2015
comment
Да, именно это зависит от того, откуда вы берете точки направления. либо Apple, либо Google API. решение, которое я дал, состоит в том, чтобы нарисовать координаты соединения линий. - person Mrug; 04.12.2015
comment
Оформить заказ Изменить.. Я также добавил код Google. - person Mrug; 04.12.2015
comment
Большое спасибо!! Попробую это. Очень ценю вашу помощь! - person Wil-It; 04.12.2015
comment
Я знаю, но я только начал на этом веб-сайте, и мне нужно 15 баллов, я думаю, прежде чем мои голоса будут подсчитаны ... очень сожалею об этом! Я проголосовал, но его не стало видно. - person Wil-It; 06.12.2015