如何在Google Map Android上以kmph的特定速度为数组制作标记。
我尝试了 animateMarker 方法,该方法在互联网上广泛使用。能够通过一组LatLng点移动但不能以特定的速度移动。
有人可以帮我在KMPH中以特定的速度移动物体
答案 0 :(得分:1)
您可能必须在此处使用Physics
。下面是一个类似算法的细节,可能会有所帮助。
Velocity
是17 km/hr
,第一个和最后一个位置之间的距离是10 km
,那么时间将是3600 sec
或3600000 ms
。 Array
中每个位置的时间。我们假设如果Array
中有100个元素,则每个位置之间的时间间隔为36 sec
或36000 ms
Handler
,其持续时间设置为36 sec
或36000 ms
,并尝试在此持续时间内制作标记动画。为此,您可以使用他Handler
提供的其他API
或默认方法。回想一下,你的数组中每次都有下一个位置的元素。注意强>
我也找到了一个例子。有关原始帖子,请参阅here。
public void animateMarker(final Marker marker, final LatLng toPosition,
final boolean hideMarker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = mGoogleMapObject.getProjection();
Point startPoint = proj.toScreenLocation(marker.getPosition());
final LatLng startLatLng = proj.fromScreenLocation(startPoint);
final long duration = 500;
final Interpolator interpolator = new LinearInterpolator();
handler.post(new Runnable() {
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float t = interpolator.getInterpolation((float) elapsed
/ duration);
double lng = t * toPosition.longitude + (1 - t)
* startLatLng.longitude;
double lat = t * toPosition.latitude + (1 - t)
* startLatLng.latitude;
marker.setPosition(new LatLng(lat, lng));
if (t < 1.0) {
// Post again 16ms later.
handler.postDelayed(this, 16);
} else {
if (hideMarker) {
marker.setVisible(false);
} else {
marker.setVisible(true);
}
}
}
});
}
希望其中的任何人都有所帮助。
答案 1 :(得分:0)
我修改了相同的方法来实现这一目标。
我们需要调用此方法
match_phrase
arrayPoints是LatLng数组。 msForKMTravel是用于移植KM的microSec。
方法:::
animateMarker(googleMap, driver, arrayPoints, distance(arrayPoints.get(0), arrayPoints.get(1)) * msForKMTravel, 0);