8

Pracuję nad projektem, w którym potrzebuję stworzyć podobną aplikację iOS do UBER i OLA, gdzie samochód porusza się w zależności od lokalizacji. Szukam jakiejś biblioteki, która może sprawić, że samochody będą się poruszać i płynnie po kolei, tak jak OLA. Na razie udało mi się przenieść samochód z jednej szerokości geograficznej na drugą. Ale skomplikowaną częścią jest to, jak skręcić i upewnić się, że samochód stoi przodem w kierunku.Przenoszenie adnotacji na Mapie jak aplikacja Uber iOS

Proszę znaleźć poniższy zrzut ekranu dla tego samego.

Screenshot

Odpowiedz

36

Właściwie miałem też jeden wymóg w moim poprzednim aplikacji iOS, więc proszę znaleźć pod poniższym linkiem pobrać kod i przejrzeć ją.

Link for iOS mapie: https://www.dropbox.com/s/4jj8em1o786qa9j/TestAnnotationMoving.zip?dl=0

Środowisko: Xcode 8 i Objective-C

Highlight kodu, które zrobiłem to.

Dla spełnienia funkcji przenoszenia samochodu takiej samej, jak aplikacja Uber iOS, należy najpierw obliczyć kąt między starym a nowym położeniem. Proszę znaleźć poniższy kod, aby dowiedzieć się, jak to obliczyć.

- (float)angleFromCoordinate:(CLLocationCoordinate2D)first 
       toCoordinate:(CLLocationCoordinate2D)second { 

    float deltaLongitude = second.longitude - first.longitude; 
    float deltaLatitude = second.latitude - first.latitude; 
    float angle = (M_PI * .5f) - atan(deltaLatitude/deltaLongitude); 

    if (deltaLongitude > 0)  return angle; 
    else if (deltaLongitude < 0) return angle + M_PI; 
    else if (deltaLatitude < 0) return M_PI; 

    return 0.0f; 
} 

Następnie zastosuj kąt do konkretnej adnotacji do przeniesienia. Proszę znaleźć poniższy kod dla tego samego.

float getAngle = [self angleFromCoordinate:oldLocation toCoordinate:newLocation]; 

//Apply the new location for coordinate.   
myAnnotation.coordinate = newLocation; 

//For getting the MKAnnotationView. 
AnnotationView *annotationView = (AnnotationView *)[self.mapView viewForAnnotation:myAnnotation]; 

//Apply the angle for moving the car. 
annotationView.transform = CGAffineTransformMakeRotation(getAngle); 

Na Google Map

link do Google Map: https://www.dropbox.com/s/a5ts108lh5rr1gd/GoogleMap.zip?dl=0

Jak uruchomić projekt?

  1. Pobierz projekt z powyższego linku do skrzynki domyślnej.
  2. Pobierz Mapy APIKey od link.
  3. Uruchom cocoapods, aby zainstalować sdk mapy google na iOS.

Utwórz obiekt GMSMarker.

GMSMarker *marker = [[GMSMarker alloc] init]; 
marker.position = CLLocationCoordinate2DMake(kCameraLatitude, kCameraLongitude); 
marker.map = _mapView; 
marker.icon = [UIImage imageNamed:@"carIcon"]; 

Uzyskaj kąt między dwoma położeniami i zastosuj je do obliczenia kąta. Użyj powyższej funkcji.

//Get the angle 
float getAngle = [self angleFromCoordinate:oldLocation toCoordinate:newLocation]; 

//Apply the new coordinate 
marker.position = newLocation; 

//Apply the angle and convert to degree from radian. 
marker.rotation = getAngle * (180.0/M_PI); 

jak w jabłkowego mapie .transform wziąć radian ale w google mapie .rotation trwa stopnia.

Poniżej znajduje się poniższa prezentacja GIF, czyli jak wygląda na mapie.

GIF

Aby osiągnąć funkcjonalność miałem utworzony plik .csv, gdzie miałem dodaną 1000 rekordy długości i szerokości geograficznej.

Uwaga: kąt jest zależny od lokalizacji, więc czasami zdarza się, że nie masz odpowiedniego kąta ze względu na lokalizację, ponieważ zależy to całkowicie od Twojej lokalizacji.

Mam nadzieję, że to działa dla Ciebie !!!

+0

Dzięki za odpowiedź, sprawdzę i przekażę moją opinię. –

+0

Oczywiście, jeśli to jest praca dla Ciebie, proszę przyjąć odpowiedź. –

+1

@RamkrishnaSharma plus 1 dla wyjaśnienia tego, możemy użyć tego również z 'gmsmapview'? – vaibhav