2013-09-02 8 views
7

Vorrei sapere qual è il modo corretto per ottenere ETA (arrivo previsto in tempo reale) da qualsiasi luogo alla mia posizione corrente, in considerazione il seguente situazione:Qual è il modo corretto per ottenere ETA (arrivo stimato di ora) da qualsiasi luogo alla mia posizione attuale

a. ex. - Ho ricevuto da un altro dispositivo la sua posizione (lon/lat) e voglio quando l'altra persona verrà a prendermi ... In questo caso quale servizio web posso utilizzare per ottenere queste informazioni per l'utente? mapkit fornisce questo tipo di opzione?

b. Nel caso in cui sarà fatto sul lato server e invierò semplicemente la mia posizione utente, quali sono gli strumenti che il mio programmatore lato server può utilizzare per ottenere informazioni ETA al fine di inviarlo al mio utente?

Grazie a tutti in anticipo.

Ho visto questo: Is there any way to determine the driving time between two locations using Apple's Maps API? - il problema, come ho trovato in altri luoghi, (a mia conoscenza) è che google api richiede l'uso dell'app Google Maps che non è installata su ogni utente iOS ora.

+1

Dovresti esaminare alcune delle nuove API SDK in iOS 7. – mattyohe

risposta

17

So che questo post è un po 'vecchio ma nel caso qualcuno stia guardando la risposta da quando iOS 7 Apple fornisce un'API in MapKit per poter calcolare tutte queste informazioni.

Ecco un frammento di come utilizzare questa API

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; 
    [request setSource:[MKMapItem mapItemForCurrentLocation]]; 
    [request setDestination:destination]; 
    [request setTransportType:MKDirectionsTransportTypeAutomobile]; 
    [request setRequestsAlternateRoutes:NO]; 
    MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; 
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) { 
     if (! error && [response routes] > 0) { 
      MKRoute *route = [[response routes] objectAtIndex:0]; 
      //route.distance = The distance 
      //route.expectedTravelTime = The ETA 
     } 
    }]; 
+0

ha funzionato correttamente restituendo 0.00 nel mio caso per qualsiasi lat lungo ... puoi essere d'aiuto in questo. – Rohit

+0

Usa sempre 'firstObject' invece di' objectAtIndex: 0'. Il suo crash proof e più chiaro – Laszlo

+0

Grazie amico. E io uso un'altra funzione per formattare il risultato. –

5

Questo ha funzionato per me usando route.distance dalla M alla risposta del K mi è stato la modifica del codice da questo tutorial map directions tutorial

(IBAction)routeButtonPressed:(UIBarButtonItem *)sender { 
    MKDirectionsRequest *directionsRequest = [[MKDirectionsRequest alloc] init]; 
    MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:thePlacemark]; 
    [directionsRequest setSource:[MKMapItem mapItemForCurrentLocation]]; 
    [directionsRequest setDestination:[[MKMapItem alloc] initWithPlacemark:placemark]]; 
    directionsRequest.transportType = MKDirectionsTransportTypeAutomobile; 
    MKDirections *directions = [[MKDirections alloc] initWithRequest:directionsRequest]; 
    [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) { 
     if (error) { 
      NSLog(@"Error %@", error.description); 
     } else { 
      routeDetails = response.routes.lastObject; 
      [self.mapView addOverlay:routeDetails.polyline]; 
      self.destinationLabel.text = [placemark.addressDictionary objectForKey:@"Street"]; 
      self.distanceLabel.text = [NSString stringWithFormat:@"%0.1f Miles", routeDetails.distance/1609.344]; 

      self.etaLabel.text = [NSString stringWithFormat:@"%0.1f minutes",routeDetails.expectedTravelTime/60]; 

      //self.transportLabel.text = [NSString stringWithFormat:@"%u" ,routeDetails.transportType]; 
      self.allSteps = @""; 
      for (int i = 0; i < routeDetails.steps.count; i++) { 
       MKRouteStep *step = [routeDetails.steps objectAtIndex:i]; 
       NSString *newStep = step.instructions; 
       self.allSteps = [self.allSteps stringByAppendingString:newStep]; 
       self.allSteps = [self.allSteps stringByAppendingString:@"\n\n"]; 
       self.steps.text = self.allSteps; 


      } 
     } 

    }]; 
} 
+0

Ha funzionato? Il suo ritorno 0,00 nel mio caso per qualsiasi lat long può sei un aiuto – Rohit