目前我正在开发一个像 Uber iOS 应用程序这样的应用程序。我已经集成了 Google Maps SDK,并且还显示了用户当前位置的自定义图像。目前我正在从服务器获取一些驾驶员当前位置详细信息(例如:100 个驾驶员)。我保存在一个NSArray
我试图展示那些纬度和经度在 GoogleMaps 上使用以下代码:
for(int i=0;i<[latLongArr count];i++)
{
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = CLLocationCoordinate2DMake([[(NSDictionary *)[latLongArr objectAtIndex:i] valueForKey:@"Latitude"] doubleValue], [[(NSDictionary *)[latLongArr objectAtIndex:i] valueForKey:@"Longitude"] doubleValue]);
marker.appearAnimation = kGMSMarkerAnimationPop;
marker.title = @"Title";
marker.snippet = @"Sub title";
marker.map = self.gMapView;
}
但我正在寻找用户界面设计和功能像这样:
任何人都可以帮我解决如何显示用户当前位置和驾驶员注释列表
(如何在谷歌地图上旋转自定义标记图像)
在路线 API(苹果或谷歌地图)中,有一个列表点。因此,要计算两点之间的角度,您可以:
func DegreeBearing(A:CLLocation,B:CLLocation)-> Double{
var dlon = self.ToRad(degrees: B.coordinate.longitude - A.coordinate.longitude)
let dPhi = log(tan(self.ToRad(degrees: B.coordinate.latitude) / 2 + M_PI / 4) / tan(self.ToRad(degrees: A.coordinate.latitude) / 2 + M_PI / 4))
if abs(dlon) > M_PI{
dlon = (dlon > 0) ? (dlon - 2*M_PI) : (2*M_PI + dlon)
}
return self.ToBearing(radians: atan2(dlon, dPhi))
}
func ToRad(degrees:Double) -> Double{
return degrees*(M_PI/180)
}
func ToBearing(radians:Double)-> Double{
return (ToDegrees(radians: radians) + 360).truncatingRemainder(dividingBy: 360)
}
func ToDegrees(radians:Double)->Double{
return radians * 180 / M_PI
}
并为制造商设置轮换
maker.rotation = DegreeBearing(self.fromPoint, B: self.toPoint)
更新了下面的 ObjC 代码
-(double) DegreeBearing:(CLLocation*) A locationB: (CLLocation*)B{
double dlon = [self ToRad:(B.coordinate.longitude - A.coordinate.longitude)];
double dPhi = log(tan([self ToRad:(B.coordinate.latitude)] / 2 + M_PI / 4) / tan([self ToRad:(A.coordinate.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{
double degree = [self ToDegrees:radians];
return degree+360% 360;
}
-(double) ToDegrees:(double)radians{
return radians * 180 / M_PI;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)