根据行驶方向旋转标记

13

我在我的 Google 地图上有一个标记,看起来像这样:

pic

当用户正在驾车时,我想根据他的行驶方向旋转它。我该如何实现这一点?我应该使用以前的位置和当前位置坐标进行计算,但我不知道怎么做。


你显然知道如何找到位置。在第一个循环之前,将上一个位置设置为当前位置。然后,您的循环不断计算前一个和当前位置之间的距离,当它足够大时,使用类似于atan2(dy,dx)的方法确定方向,然后设置标记方向,接着记住previous == current并进行另一个循环。 - Weather Vane
为什么不使用Location对象的bearing属性?您可以将其设置为CameraPosition - romtsn
Leaflet API中我该如何实现它? - ShAkKiR
1个回答

40
如果您使用GPS定位用户,那么在onLocationChanged中获取的Location对象包含方向角
如果您只有两个坐标(例如仅从网络位置提供者获取坐标),则可以使用Location.bearingTo()计算两个坐标之间的方向角。
Location prevLoc = ... ;
Location newLoc = ... ;
float bearing = prevLoc.bearingTo(newLoc) ;
如果您有一个轴承,您可以使用MarkerOptions.rotation()来设置标记的旋转:
mMap.addMarker(new MarkerOptions()
                    .position(markerLatLng)
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.map_marker))
                    .anchor(0.5f, 0.5f)
                    .rotation(bearing)
                    .flat(true));

你必须将 锚点 设置为你想围绕旋转的点,并且它也是你想要标记位置的点。 (0.5, 0.5) 是图像的中心。


根据这个答案,它是如何知道汽车的前面和侧面的? - The_Martian
它并不知道,但它假设车往前移动(使用两个连续的位置,移动方向指向后一个位置)。 - hunyadym
有没有想法如何在Angular Google Maps上实现这个? - Wax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接