2013-09-02 16 views
7

Chciałbyś wiedzieć, jaki jest właściwy sposób uzyskania ETA (szacowany czas przybycia) z dowolnej lokalizacji do mojej bieżącej lokalizacji, biorąc pod uwagę następujące Sytuacja:Jaki jest właściwy sposób uzyskania ETA (szacowany czas przybycia) z dowolnego miejsca do mojej bieżącej lokalizacji

a. dawny. - Dostałem z innego urządzenia jego lokalizację (lon/lat) i chcę, kiedy druga osoba odbierze mnie ... W takim przypadku jakiej usługi internetowej mogę użyć, aby uzyskać te informacje dla użytkownika? Czy mapkit zapewnia taką opcję?

b. W przypadku, gdy zostanie to zrobione po stronie serwera, a ja po prostu wyślę swoją lokalizację użytkownika, jakie są narzędzia, których mój programista po stronie serwera może użyć, aby uzyskać informacje o ETA, aby odesłać go do mojego użytkownika?

Dziękuję wszystkim z góry.

Widziałem to: Is there any way to determine the driving time between two locations using Apple's Maps API? - problem, jak znalazłem w innych miejscach (według mnie) jest taki, że google api wymaga użycia aplikacji Mapy Google, która nie jest teraz zainstalowana dla każdego użytkownika iOS.

+1

Powinieneś popatrzeć na niektóre z nowych API SDK w iOS 7. – mattyohe

Odpowiedz

17

Wiem, że ten post jest nieco stary, ale na wypadek, gdyby ktoś szukał odpowiedzi, ponieważ iOS 7 Apple udostępnia API w MapKit, aby obliczyć wszystkie te informacje.

Oto urywek, jak używać tego 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

czy ta metoda zadziałała, to powraca 0.00 w moim przypadku przez jakiś długi czas ... czy możesz mi pomóc, że jestem uderzony w to. – Rohit

+0

Zawsze używaj 'firstObject' zamiast' objectAtIndex: 0'. Jest odporny na awarie i bardziej przejrzysty – Laszlo

+0

Dziękuję człowieku. I używam innej funkcji do sformatowania wyniku. –

5

ten pracował dla mnie za pomocą route.distance od M odpowiedzieć na K za byłem modyfikowania kodu z tym tutorialu 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

Czy to zadziałało? Jego powrót 0.00 w moim przypadku przez długi czas może pls pomoc – Rohit

Powiązane problemy