我正在使用 osmdroid 地图制作 GPS 跟踪应用程序。我有一项服务可以跟踪 gps 数据并将其存储在 sqlite 数据库中。该服务通过广播与地图通信(每次更改位置时,它都会发送广播消息)。当 Map 收到广播消息时,它会从数据库中获取最新的纬度和经度,并将地图移动到地理点。到目前为止,它运行流畅。
现在,我想用当前轨迹覆盖地图,在上面显示路线。我以这种方式使用 ItemizedIconOverlay 厌倦了它:
public static void locateMap(Context context) {
try{
SQLiteDatabase database = context.openOrCreateDatabase(DBNAME, MODE_PRIVATE, null);
Cursor cLat = database.rawQuery(latitudeQuery, null);
if (cLat.moveToFirst()) {
latitude = cLat.getDouble(0);
}
else {
latitude = 0;
}
Cursor cLong = database.rawQuery(longitudeQuery, null);
if (cLong.moveToFirst()) {
longitude = cLong.getDouble(0);
}
else {
longitude = 0;
}
database.close();
GeoPoint geoPoint = new GeoPoint(latitude,longitude);
mMapController.animateTo(geoPoint);
mMapController.setCenter(geoPoint);
overlayItems.add(new OverlayItem("","",geoPoint));
Drawable mDrawable = context.getResources().getDrawable(R.drawable.pont);
mResourceProxy = new DefaultResourceProxyImpl(context.getApplicationContext());
mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(overlayItems, mDrawable, null, mResourceProxy);
mMapView.getOverlays().add(mMyLocationOverlay);
}
catch(Exception ex){
String err = (ex.getMessage()==null)?"drawOnMapFailed":ex.getMessage();
Log.v("MAP",err);
}
}
它一直有效,直到点击地图。我得到 IndexOutOfBoundsException 异常,所以我认为地图并不喜欢这种方式。代码有问题,还是有其他方法可以覆盖 osmdroid?也许这与我制作这个应用程序的方式有关?
更新:我以这种方式尝试使用 PathOverlay,但在地图上没有显示任何内容:
PathOverlay mMyLocationOverlay = new PathOverlay(Color.RED, context);
mMyLocationOverlay.addPoint(geoPoint);
mMapView.getOverlays().add(mMyLocationOverlay);