我正在开发一个项目,我需要为UBER和OLA创建类似的iOS应用程序,其中汽车根据位置移动。我正在寻找某种类型的图书馆,它可以使汽车移动并像OLA一样顺利转弯。现在我能够将汽车从一个纬度经度移动到另一个纬度经度。但复杂的部分是如何在转向方向时转向并确保汽车面向前方。
请查看以下屏幕截图。
答案 0 :(得分:46)
实际上我以前的iOS应用程序中也有一个要求,所以请找下面的代码下载并查看它。
iOS地图链接:https://www.dropbox.com/s/4jj8em1o786qa9j/TestAnnotationMoving.zip?dl=0
环境:Xcode 8和Objective-C
突出显示我已经完成的代码。
为了完成与Uber iOS应用程序相同的移动汽车功能,您需要首先计算旧位置和新位置之间的角度。请找到以下代码来计算它。
- (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;
}
然后将角度应用于特定注释以进行移动。请找到相同的以下代码。
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);
适用于Google地图
Google地图的链接: https://www.dropbox.com/s/a5ts108lh5rr1gd/GoogleMap.zip?dl=0
如何运行项目?
创建GMSMarker的对象。
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake(kCameraLatitude, kCameraLongitude);
marker.map = _mapView;
marker.icon = [UIImage imageNamed:@"carIcon"];
获取两个位置之间的角度并应用它们来计算角度请使用上述功能。
//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);
与苹果地图一样 .transform 取弧度,但在谷歌地图 .rotation 需要学位。
请查看以下GIF表示,以及它在地图上的显示方式。
为了完成我创建的.csv文件的功能,我添加了1000个纬度和经度记录。
注意:您可以根据位置获得角度,因此有时您会因位置而无法获得正确的角度,因为它完全取决于您的位置。
希望它适合你!!!