【发布时间】:2017-01-15 22:29:20
【问题描述】:
我正在谷歌地图上开发一些导航任务。当车辆转弯移动时,我必须移动标记,就像优步在他们的应用程序中所做的那样。我尝试了@SO 提供的不同解决方案,但它没有按我的需要工作。
我用当前的 lat/long 和以前的 lat/long 获得角度,并用该旋转为 mapwithBearing 设置动画
这里是代码
[CATransaction begin];
[CATransaction setAnimationDuration:2.0];
NSDictionary *data = [[result objectForKey:@"returnData"] objectForKey:@"data"];
if (![data isEqual: [NSNull null]]) {
driverLocationCoordinate = CLLocationCoordinate2DMake([[data objectForKey:@"lat"] doubleValue], [[data objectForKey:@"lng"] doubleValue]);
driverMarker.position = driverLocationCoordinate;
GMSCameraPosition * camera = [GMSCameraPosition cameraWithLatitude:driverLocationCoordinate.latitude
longitude:driverLocationCoordinate.longitude
zoom:16];
mapHomeView.camera = camera;
if ([data objectForKey:@"preLat"] != [NSNull null] && [data objectForKey:@"preLng"] !=[NSNull null]){
if ([[data objectForKey:@"preLat"] floatValue] != 0.0f && [[data objectForKey:@"preLng"] floatValue] != 0.0f) {
NSLog(@"pre_lat = %f and pre_lng = %f", [[data objectForKey:@"preLat"] floatValue], [[data objectForKey:@"preLng"] floatValue]);
CLLocationCoordinate2D previousCoordinates = CLLocationCoordinate2DMake([[data objectForKey:@"preLat"] floatValue], [[data objectForKey:@"preLng"] floatValue]);
driverMarker.rotation = [self DegreeBearing:previousCoordinates locationB:driverMarker.position];
[mapHomeView animateToBearing:driverMarker.rotation];
}
}
[CATransaction commit];
我刚刚从另一个@SO帖子中获取了学位代码,当我在直路上时它可以工作,但是当汽车静止或转弯时,它会闪烁
这是从另一个 SO 帖子中获取角度的代码。
-(double) DegreeBearing:(CLLocationCoordinate2D) A locationB: (CLLocationCoordinate2D)B{
double dlon = [self ToRad:(B.longitude - A.longitude) ];
double dPhi = log(tan([self ToRad:(B.latitude)] / 2 + M_PI / 4) / tan([self ToRad:(A.latitude)] / 2 + M_PI / 4));
if (fabs(dlon) > M_PI){
dlon = (dlon > 0) ? (dlon - 2*M_PI) : (2*M_PI + dlon);
}
return [self ToBearing:(atan2(dlon, dPhi))];
}
-(double) ToRad: (double)degrees{
return degrees*(M_PI/180);
}
-(double) ToBearing:(double)radians{
return [self ToDegrees:radians] + 360 % 360;
}
-(double) ToDegrees: (double)radians{
return radians * 180 / M_PI;
}
任何人都可以提供帮助或提出任何其他解决方案吗?
【问题讨论】:
-
你得到解决方案了吗?
-
你有解决办法吗?如果你找到了,请帮助我。
-
我使用了上面提到的代码并做了一些修改,但这并不是一个完美的解决方案。
标签: ios objective-c google-maps google-maps-markers