Quiero mostrar una ruta en un MKMapView entre la ubicación actual y la ubicación deseada como una anotación.

¿Cuál es la mejor manera de hacer esto?

posibles duplicados de dibujo de rutas en MKMapView

OriginalEl autor 1337code | 2011-12-22

3 Comentarios

  1. 8

    ///en .h
    agregar delegado MKMapViewDelegate

    ///en .m archivo

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation
    {
    
         CLLocationCoordinate2D newcordinate =   newLocation.coordinate;
         CLLocationCoordinate2D oldcordinate =   oldLocation.coordinate;
    
           MKMapPoint * pointsArray =
                   malloc(sizeof(CLLocationCoordinate2D)*2);
    
               pointsArray[0]= MKMapPointForCoordinate(oldcordinate); 
               pointsArray[1]= MKMapPointForCoordinate(newcordinate);    
    
                MKPolyline *  routeLine = [MKPolyline polylineWithPoints:pointsArray count:2];
               free(pointsArray);
    
                [MapView addOverlay:routeLine];  //MkMapView declared in .h
    }
    
    //MKMapViewDelegate
    
    - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
    {
        MKOverlayView* overlayView = nil;
    
    
              MKPolylineView  * _routeLineView = [[[MKPolylineView alloc]                   initWithPolyline:self.routeLine] autorelease];
                _routeLineView.fillColor = self.PathColor;
               _routeLineView.strokeColor = self.PathColor;
              _routeLineView.lineWidth = 15;
                _routeLineView.lineCap = kCGLineCapSquare;
    
    
                overlayView = _routeLineView;
    
                return overlayView;
    
    }

    OriginalEl autor Andrew

  2. 2

    He intentar siguiente código…funciona muy bien en mi proyecto…intentarlo..

    Primera descarga KMLParser.h y KMLParser.m de este link:-

    También descargar DDAnnotation.h y DDAnnotation.m archivo de este link:-

    Ahora Crear un Controlador de Vista Como SomeViewController.

    Agregar biblioteca siguientes:-

    1. CoreLocation.marco
    2. MapKit.marco
    3. QuartzCore.marco

    En SomeViewController.h importación KMLParser.h archivo.

    Escribir el siguiente código en SomeViewController.h

    #import <UIKit/UIKit.h>
    #import <MapKit/MapKit.h>
    #import "KMLParser.h"
    @interface SomeViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate, MKOverlay>{
    
        double currentLat;
        double currentLong;
    
        double desiredLatitude;
        double desiredLongitude;
    
        MKMapView *mapView;
        KMLParser *kml;
        NSMutableArray *annotations;
    
    } @property(nonatomic, retain)IBOutlet MKMapView *mapView;
    
    @end

    Ahora en el SomeViewController.xib arrastrar y soltar el MapView y dar vínculo con mapView de Propietario del Archivo. También se establece delegado de MapView para el dueño del Archivo.

    Ahora en SomeViewController Escribir el siguiente código:-

    #import "SomeViewController.h"
    #import <QuartzCore/QuartzCore.h>
    #import "DDAnnotation.h"
    @implementation SomeViewController
    @synthesize mapView;
    - (void)viewDidLoad {
    [super viewDidLoad];
    currentLat = 21.215538; //You can set current latitude here. 
    currentLong = 72.858753; //You can set current longitude here.
    desiredLatitude = 21.211976; //You can set destination latitude here.
    desiredLongitude = 72.851593; //You can set destination longitude here.
    MKCoordinateRegion region = {{0.0f, 0.0f}, {100.0f, 100.0f}};
    CLLocation* currentLocation = [[CLLocation alloc] initWithLatitude:currentLat longitude:currentLong];
    region.center = currentLocation.coordinate;
    region.span.longitudeDelta = 0.05;
    region.span.latitudeDelta  = 0.05;
    [self.mapView setRegion:region animated:YES];
    annotations=[[NSMutableArray alloc] init];
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = currentLat;
    theCoordinate.longitude = currentLong;
    DDAnnotation* myAnnotation=[[DDAnnotation alloc] init];
    myAnnotation.coordinate=theCoordinate;
    myAnnotation.title[email protected]"You are here";
    myAnnotation.subtitle[email protected]"Current location";
    [mapView addAnnotation:myAnnotation];
    [annotations addObject:myAnnotation];
    CLLocationCoordinate2D theCoordinate1;
    theCoordinate1.latitude = desiredLatitude;
    theCoordinate1.longitude = desiredLongitude;
    DDAnnotation* myAnnotation1=[[DDAnnotation alloc] init];
    myAnnotation1.coordinate=theCoordinate1;
    myAnnotation1.title[email protected]"Desired Location's Title";
    myAnnotation1.subtitle= @"Desired Location's Sub-title";
    [mapView addAnnotation:myAnnotation1];
    [annotations addObject:myAnnotation1];
    NSString *path = [NSString stringWithFormat:@"http://maps.google.com/maps?f=d&hl=en&saddr=%f,%f&daddr=%f,%f&ie=UTF8&0&om=0&output=kml",currentLat,currentLong,desiredLatitude,desiredLongitude];
    NSLog(@" Path String : %@", path); 
    kml = [[KMLParser alloc] initWithURL:[NSURL URLWithString:path]];
    [kml parseKML];
    //Add all of the MKOverlay objects parsed from the KML file to the map.
    NSArray *overlays = [kml overlays];
    [self.mapView addOverlays:overlays];
    }
    #pragma mark MKMapViewDelegate
    - (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
    {
    return [kml viewForOverlay:overlay];
    }
    - (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation{
    //if it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]]){
    return nil;
    }
    else{
    static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
    MKPinAnnotationView* pinView = [[[MKPinAnnotationView alloc]
    initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
    pinView.animatesDrop=YES;
    pinView.canShowCallout=YES;
    pinView.pinColor=MKPinAnnotationColorGreen;
    return pinView;
    }   
    }
    No funciona dando sigabrt en el método de kml = [[KMLParser parseKMLAtURL:[….]; dando aviso como foundClass método ‘+parseKMLAtURL:’ no encontrado (tipo de retorno por defecto ‘id’)
    Ha añadido KMLParser.h y KMLParser.clase m de archivo desde el siguiente enlace a su proyecto? developer.apple.com/library/ios/#samplecode/KMLViewer/Listings/…
    Sí, ha añadido que los archivos de mi proyecto. Pero no de trabajo.
    Sí, el método ha cambiado en KMLParser archivo de clase. Uso -(id)initWithURL:(NSURL *)url; con – (void)parseKML método en lugar de «parseKMLAtURL:»
    También he editado código anterior con el nuevo código. usted puede comprobar ahora.

    OriginalEl autor Sunil Zalavadiya

  3. 0

    Tienes que calcular tu auto de la manera que los puntos y trazar la ruta como una capa. No hay api pública para mostrar la ruta en un MKMapView.

    La solución más rápida es abrir la app mapas del teléfono con la ruta.

    Sí, yo sé por que, pero he visto en algunas aplicaciones que es posible trazar una ruta entre los dos lugares, no sé cómo, no necesito las direcciones aquí característica, para que la aplicación va a lanzar la app Mapas, sólo quiero mapa para trazar una ruta en el mapa, y no puedo encontrar en cualquier lugar para eso, pero es posible

    OriginalEl autor Alex Terente

Dejar respuesta

Please enter your comment!
Please enter your name here