【问题标题】:How to rotate custom marker image on google map objective c如何在谷歌地图目标c上旋转自定义标记图像
【发布时间】:2015-12-29 10:32:10
【问题描述】:

目前我正在开发一个应用程序,例如 Uber iOS 应用程序。我已经集成了 Google Maps SDK,并且还显示了用户当前位置的自定义图像。目前我正在从服务器获取一些司机的当前位置详细信息(例如:100 个司机)。我保存在一个 NSArray 中,并尝试使用以下代码在 GoogleMaps 上显示那些 Lat & Long:

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;
}

但我看起来像这样的 UIDesign & Functionality:

谁能帮我看看如何显示用户当前位置和司机的注释列表
(如何在谷歌地图上旋转自定义标记图像)

【问题讨论】:

  • 你必须有一个服务器来更新汽车的位置或者你可以从服务器获取当前位置和目标位置,速度,然后获得方向和运动模拟器与速度
  • 是的。我已经将用户和驱动程序当前位置更新为服务器。我的问题是(如何在谷歌地图上旋转自定义标记图像)。如果用户打开应用程序,所有汽车图像将在谷歌地图上旋转 360 度 ---> 这就是我正在寻找的
  • 也为每个驱动程序和用户创建 NSthreads。然后根据来自服务器的数据更新他们的位置,并进行一些条件检查,例如,如果驱动程序的位置在用户的半径范围内,则显示 else 跳过。最好是在直接编码之前先为此写一些算法或伪代码。
  • 在服务器端,我只得到驱动程序的纬度和经度 --> 我的要求是我想在谷歌地图上显示这些列表(我已经这样做了)。但是像Direction API这样的另一个未来--->汽车正在水平移动但是(汽车符号有时会显示垂直/反向等)但它不会根据汽车方向旋转自定义标记图像
  • @MannamBrahmam.你如何在用户移动时移动汽车方向(旋转)。

标签: ios objective-c google-maps


【解决方案1】:

方向 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;
}

【讨论】:

  • ThanQ。如果你不是我的,你能在 Objective-c 中提供一些示例代码吗?目前我不知道 Swift
  • 感谢您的回复。让我尝试实施 ---> 如果您没有更好的解决方案,请在此处发布.. ThanQ Nguyen Hoan
  • 无法调用 marker.rotation=degreebearing 任何解决方案??
  • @BadalShah。你有标记旋转吗?请指导我如何使用谷歌地图旋转地图标记。
  • 直到现在我还没有得到解决方案。如果你会得到然后请告诉我。
猜你喜欢
  • 1970-01-01
  • 2018-09-09
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
  • 2020-06-26
相关资源
最近更新 更多