0

我的 Yandex 地图中有近 50 辆汽车,其中对象的坐标来自 API,我必须按汽车的位置绘制汽车并每 5 秒更新一次坐标。当我第一次运行应用程序时,没关系,但 5 秒后它会在旧对象旁边绘制另一个对象(汽车),几秒钟后,它会在我的地图中显示与一辆车相关的许多汽车。我的问题是如何删除之前绘制的对象并仅保留最后更新的对象。提前致谢!我是 android 新手:) import java.io.BufferedReader; 导入 java.io.IOException;导入 java.io.InputStreamReader;导入 java.net.MalformedURLException;导入 java.net.URL;导入 java.net.URLConnection;导入 java.util.ArrayList;导入 java.util.List;导入 java.util.Timer;导入 java.util.TimerTask;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    import android.app.Activity;
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.util.Log;
    import ru.yandex.yandexmapkit.*;
    import ru.yandex.yandexmapkit.overlay.Overlay;
    import ru.yandex.yandexmapkit.overlay.OverlayItem;
    import ru.yandex.yandexmapkit.overlay.balloon.BalloonItem;
    import ru.yandex.yandexmapkit.utils.GeoPoint;

    public class BalloonOverlayActivity extends Activity {
        MapController mMapController;
        OverlayManager mOverlayManager;

        Timer timer;
        List<Car> listCars = new ArrayList<Car>();

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setTitle(R.string.app_name);

            setContentView(R.layout.sample);

            final MapView mapView = (MapView) findViewById(R.id.map);

            mMapController = mapView.getMapController();
            mOverlayManager = mMapController.getOverlayManager();
            mOverlayManager.getMyLocation().setEnabled(false);

            mMapController.setPositionAnimationTo(new GeoPoint(51.0708045959473,71.3955688476563));

            timer = new Timer();
            timer.schedule(new MyTimerTask(), 1000, 5000);
        }

        public void showObject() {
            Resources res = getResources();
            Overlay overlay = new Overlay(mMapController);
            List<OverlayItem> carsItem = new ArrayList<OverlayItem>();

            for (Car c : listCars) {
                final OverlayItem car = new OverlayItem(
                        new GeoPoint(c.lat, c.lon),
                        res.getDrawable(R.drawable.car));
                BalloonItem balloonCar = new BalloonItem(this, car.getGeoPoint());
                balloonCar.setText("Машина "+c.num);
                car.setBalloonItem(balloonCar);
                overlay.addOverlayItem(car);
                carsItem.add(car);
            }
            System.out.println(overlay.getOverlayItems().size());
            mOverlayManager.addOverlay(overlay);
        }

        public void getData() {
            listCars.clear();
            try {
                URL komandir = new URL("http://google.kz........");
                URLConnection tc = komandir.openConnection();
                Log.d("connection", tc+"");
                BufferedReader in = new BufferedReader(new InputStreamReader(
                        tc.getInputStream()));
                String line="";
                String message="";
                while ((line =in.readLine()) != null) {
                    message=message+line;
                    Log.d("message", message);
                }
                JSONObject main=new JSONObject(message);
                JSONObject data=main.getJSONObject("data");
                JSONArray array = data.getJSONArray("crews_coords");
                for (int i = 0; i < array.length(); i++) {
                    JSONObject object = (JSONObject) array.get(i);

                    listCars.add(new Car(object.getInt("crew_id"), object
                            .getString("crew_code"), object.getDouble("lon"), object
                            .getDouble("lat")));
                }
                showObject();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        class MyTimerTask extends TimerTask {

            @Override
            public void run() {
                getData();
            }

        }
    }
4

1 回答 1

0

// 从地图中移除所有标记、叠加层和折线。

googleMap.clear();
markerList.clear();
于 2014-07-01T05:56:09.543 回答