【发布时间】:2019-02-27 12:10:34
【问题描述】:
我正在开发一个 Android 应用程序,我必须在 Google 地图上显示多个 GPS 设备(比如手机)的实时位置。我正在使用 Amazon Dynamo DB 作为此应用程序的数据库。我已经成功构建了一个界面,驾驶员可以在其中登录,他们的实时位置将存储在我的数据库中,即 Dynamo Db。
现在,问题在于在地图上显示标记并为其设置动画。我有以下代码,我通过 SCAN 操作获取存储在 Dynamo DB 中的所有位置并尝试显示标记。
`public void showMarker(){
new Thread(new Runnable() {
int width = 50;
int height = 50;
BitmapDrawable bitmapDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.car);
Bitmap b =bitmapDrawable.getBitmap();
Bitmap smallMarker = Bitmap.createScaledBitmap(b,width,height,false);
double fetchedLatitude;
double fetchedLongitude;
int fetchedVehicleId;
@Override
public void run() {
final Gson gson = new Gson();
final StringBuilder stringBuilder = new StringBuilder();
final PaginatedList<VehicleLocationsDO> onTrackVehicles = dynamoDBMapper.scan(VehicleLocationsDO.class, new DynamoDBScanExpression());
runOnUiThread(new Runnable() {
@Override
public void run() {
try{
for (int i=0;i<onTrackVehicles.size();i++){
String OnTrackVehiclesString = gson.toJson(onTrackVehicles.get(i));
Log.e("Json String", OnTrackVehiclesString);
stringBuilder.append(OnTrackVehiclesString+"\n");
JsonModel onTrackVehiclesObject = gson.fromJson(OnTrackVehiclesString,JsonModel.class);
fetchedLatitude = onTrackVehiclesObject.get_latitude();
fetchedLongitude= onTrackVehiclesObject.get_longitude();
LatLng latLng = new LatLng(fetchedLatitude,fetchedLongitude);
if(marker == null){
mMap.addMarker(new MarkerOptions().position(latLng).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)) );
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(fetchedLatitude, fetchedLongitude), 16.5f));
}
else{
MarkerAnimation.animateMarkerToICS(marker,latLng, new LatLngInterpolator.Spherical());
// mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(fetchedLatitude,fetchedLongitude),16.5f));
}
}
}
catch (Exception e){
Log.e("Exception caught",e.toString());
}
}
});
}
}).start();
}`
在此之后,我在每 1 秒重复一次的计时器内调用此方法。但问题是它没有为标记设置动画,而是不断地一个接一个地添加新的标记。
【问题讨论】:
-
您需要 (a) 维护添加的标记集合(添加
addMarker的结果),(b) 以某种方式识别每个驾驶员/车辆(从您的数据库结果)和(c) 删除每个驾驶员/车辆的先前标记。
标签: java android amazon-web-services google-maps amazon-dynamodb