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?
- Pobierz projekt z powyższego linku do skrzynki domyślnej.
- Pobierz Mapy APIKey od link.
- 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.
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 !!!
Dzięki za odpowiedź, sprawdzę i przekażę moją opinię. –
Oczywiście, jeśli to jest praca dla Ciebie, proszę przyjąć odpowiedź. –
@RamkrishnaSharma plus 1 dla wyjaśnienia tego, możemy użyć tego również z 'gmsmapview'? – vaibhav