2

我正在尝试动态添加标记(不是静态的)。动态意思是,当我从服务器获取更新时添加标记。

因此,以下是我的 ItemizedOverlay 代码:

private class VehicleItemizedOverlay extends ItemizedOverlay<OverlayItem>{
    private ArrayList<OverlayItem> mOverlayItems = new ArrayList<OverlayItem>();

    public VehicleItemizedOverlay(Drawable pDefaultMarker, ResourceProxy pResourceProxy) {
        super(pDefaultMarker, pResourceProxy);
    }

    @Override
    public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {
        return false;
    }

    @Override
    protected OverlayItem createItem(int pos) {
        return mOverlayItems.get(pos);
    }

    @Override
    public int size() {
        if(mOverlayItems!=null) return mOverlayItems.size();
        else return 0;
    }

    public void addOverlayItem(double longitude, double latitude, Bitmap bitmap){
        if(Preferences.DEBUG) Log.d("MapActivity", "Latitude: "+latitude+" Longitude: "+longitude);
        MarkerDrawable drawable = new MarkerDrawable(MapActivity.this, bitmap);
        OverlayItem item = new OverlayItem("a", "a", new GeoPoint((int)(latitude*1e6), (int)(longitude*1e6)));
        item.setMarker(drawable);
        item.setMarkerHotspot(HotspotPlace.CENTER);
        mOverlayItems.add(item);
        populateNow();
    }

    public void populateNow(){
        populate();
    }
}

以下是方法,我正在创建 ItemizedOverlay 并将其添加到我的活动 onCreate() 中的 MapView:

mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
mVehicleOverlay = new VehicleItemizedOverlay(getResources().getDrawable(R.drawable.stub), mResourceProxy);
mMapView.getOverlays().add(mOverlay);

现在,每当我从服务器获得响应时,我都会创建 OverlayItems 并将其添加到 ItemizedOverlay。

//onResponse is callback I received on receiving response. Vehicle is my vehicle object
public void onResponse(ArrayList<Vehicle> aVehicles) {
    for(int i=0;i<mVehicles.size();i++){
        final int lat = (int)(mVehicles.get(i).getLatitude()*1e6);
        final int lon = (int)(mVehicles.get(i).getLongitude()*1e6);
        mVehicleOverlay.addOverlayItem(lon, lat, bitmap);
    }
}

但是所有覆盖项目在地图的中心点相互重叠。我错过了什么吗?

此外,如果我在添加之前向 mVehicleOverlay 添加了一些静态叠加项目,那么它可以正常工作。

    mVehicleOverlay = new VehicleItemizedOverlay(getResources().getDrawable(R.drawable.stub), mResourceProxy);
final int lat = (int)(STATIC_LATITUDE*1e6);
final int lat = (int)(STATIC_LONGITUDE*1e6);
mOverlay.addOverlayItem(lon, lat, bitmap);
    mMapView.getOverlays().add(mVehicleOverlay);

在 OSMDroid 中,添加自定义逐项叠加后,我是否应该像在 Google API v1 中那样添加和填充叠加项?或者我在这里遗漏了什么?

4

0 回答 0