java android打开街道地图,更新位置标记

时间:2017-03-13 11:56:55

标签: java android openstreetmap osmdroid

我有一些标记并更新了这个标记的位置(我发送服务器请求)。但是,当我放置新标记时,我做到了这一点:

public void putMarkers() {

        Singleton si = Singleton.getInstance();
        Drawable newMarker = getApplication().getResources().getDrawable(R.drawable.znacznik_new);
        Drawable newMarkerAktywny = getApplication().getResources().getDrawable(R.drawable.ikona_znacznik_pojazd_aktywna);

        mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
        activeOverlayItemArray.clear();
        anotherOverlayItemArray.clear();

        for(ObjectDefExtends object : si.getListaVisible()){
            if (object.lon == null) object.lon = 0.0;
            if (object.lat == null) object.lat = 0.0;
                  /*if (si.getListaVisible().get(a).lon!=null&&si.getListaVisible().get(a).lon!=0)*/
            if (object == Singleton.getInstance().currentObject) {
                activeOverlayItemArray.add(new OverlayItem(object.name,
                        object.name, new GeoPoint(object.lat, object.lon)));

            } {
                anotherOverlayItemArray.add(new OverlayItem(object.name,
                        object.name, new GeoPoint(object.lat, object.lon)));

            }
        }
        anotherItemizedIconOverlay = new ItemizedIconOverlay<>(anotherOverlayItemArray, newMarker, new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {

            @Override
            public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
                indexs = index + 1;
                mPin.hideInfoWindow();
                mapView.getOverlays().remove(mPin);
                mPin.setPosition(anotherItemizedIconOverlay.getItem(index).getPoint());
                mPin.setTitle(anotherItemizedIconOverlay.getItem(index).getTitle());

                try {
                    tvStreetName.setText(getCityAndStreet(anotherItemizedIconOverlay.getItem(index).getPoint().getLatitude(), anotherItemizedIconOverlay.getItem(index).getPoint().getLongitude(), getBaseContext()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                currentNumber = index;
                Singleton.getInstance().setCurrentObjectIndex(currentNumber);
                Log.e("azymut ", Singleton.getInstance().getListaODE().get(currentNumber).azimuth + "");
                updateEverything();
                mPin.showInfoWindow();
                mapView.getOverlays().add(mPin);
                return true;
            }

            @Override
            public boolean onItemLongPress(final int index, final OverlayItem item) {
                return false;
            }

        }, mResourceProxy);


        activeItemizedIconOverlay = new ItemizedIconOverlay<>(activeOverlayItemArray, newMarkerAktywny, new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {

            @Override
            public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
                mPin.hideInfoWindow();
                mapView.getOverlays().remove(mPin);
                mPin.setPosition(activeItemizedIconOverlay.getItem(index).getPoint());
                mPin.setTitle(anotherItemizedIconOverlay.getItem(index).getTitle());
                currentNumber = index;
                Singleton.getInstance().setCurrentObjectIndex(currentNumber);
                updateEverything();
                mPin.showInfoWindow();
                mapView.getOverlays().add(mPin);
                return true;
            }

            @Override
            public boolean onItemLongPress(final int index, final OverlayItem item) {
                return false;
            }

        }, mResourceProxy);


        for (int a = 0; a < anotherItemizedIconOverlay.size(); a++) {
            if (si.listaVisible.indexOf(Singleton.getInstance().currentObject) == a) {
                activeItemizedIconOverlay.removeAllItems();
                activeItemizedIconOverlay.addItem(new OverlayItem(
                        si.getListaVisible().get(a).name,
                        si.getListaVisible().get(a).name,
                        new GeoPoint(si.getListaVisible().get(a).lat,
                                Singleton.getInstance().getListaVisible().get(a).lon)));

                mPin.setPosition(anotherItemizedIconOverlay.getItem(a).getPoint());
                mPin.setAnchor(0.5f, 0.5f);
                mPin.setIcon(getResources().getDrawable(R.drawable.pusty));
                mPin.setTitle(anotherItemizedIconOverlay.getItem(a).getTitle());
                break;
            }
        }
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mapView.getOverlays().add(mPin);
                mapView.getOverlays().add(anotherItemizedIconOverlay);
                mapView.getOverlays().add(activeItemizedIconOverlay);
                mapView.invalidate();
            }
        });
    }

这就是我更新职位的方式:

public void aktualizujCoInterwal(int interwal) {
    aktualizacja = true;
    executor = Executors.newScheduledThreadPool(1);
    executor.scheduleAtFixedRate(new Runnable() {
        public void run() {
            Log.e("aktualizacja", "akt");
            if (timeout) {
                executor.shutdown();
                timedOut();
            } else {
                aktualizacjaDanych();
            }
        }
    }, 0, interwalAktualizacji, TimeUnit.SECONDS);
}


 public void aktualizacjaDanych() {
        SmokConnectorImplPortBinding srv1 = new SmokConnectorImplPortBinding(null, URL);

        try {
            Singleton si = Singleton.getInstance();
            ObjectLastStateResult lastState2;
            lastState2 = srv1.GetObjectLastState(uid, now);
            int rozmiarNowych = lastState2.objectState.size();
            int value = (Integer) lastState2.getProperty(0);
            if (value != 1) {

                timeout = true;
                executor.shutdownNow();
                timedOut();

            } else {
                int rozmiarObecnych = si.getListaODE().size();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //czyszczenie poprzednio dodanych na mape obiektow
                        anotherOverlayItemArray.clear();
                        activeOverlayItemArray.clear();
                        mapView.getOverlays().clear();
                    }
                });
                for (int i = 0; i < rozmiarNowych; i++) {
                    for (int b = 0; b < rozmiarObecnych; b++) {

                        if (si.getListaODE().get(b).id.equals(lastState2.objectState.get(i).id)) {
                            if (lastState2.objectState.get(i).lon != null && lastState2.objectState.get(i).lon.doubleValue() != 0) {
                                if (lastState2.objectState.get(i).lat != null && lastState2.objectState.get(i).lat.doubleValue() != 0) {

                                    si.getListaODE().get(b).lat = lastState2.objectState.get(i).lat.doubleValue();
                                    si.getListaODE().get(b).lon = lastState2.objectState.get(i).lon.doubleValue();
                                }
                                si.getListaODE().get(b).azimuth = lastState2.objectState.get(i).azimuth.intValue();
                                si.getListaODE().get(b).lastDataTime = lastState2.objectState.get(i).dateTime;
                                si.getListaODE().get(b).statusGPS = lastState2.objectState.get(i).statusGPS;
                                try {
                                    si.getListaODE().get(b).mySensors = lastState2.objectState.get(i).sensors.sensor;
                                } catch (NullPointerException e) {
                                    Log.e("Null", "sensory są puste");
                                }
                                si.getListaODE().get(b).description1 = lastState2.objectState.get(i).description1;
                                si.getListaODE().get(b).description2 = lastState2.objectState.get(i).description2;
                                si.getListaODE().get(b).velocity = lastState2.objectState.get(i).velocity.intValue();
                                try {
                                    si.getListaODE().get(b).icons = lastState2.objectState.get(i).sensors.icon;
                                } catch (NullPointerException e) {
                                    Log.e("Null", "sensory są puste");
                                }
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        now = DateTime.now();
        Singleton si = Singleton.getInstance();
        if (si.getListaVisible().size() > 0) {
            obiektyNaMape();
            updateEverything();
        }
        showCurrentMarker();
    }

来自服务器的所有对象都有一个方位角,我从所有标记中旋转一个标记图标,当首先完成更新时,我会看到一个默认标记,然后我看到一个旋转标记。

0 个答案:

没有答案