简体   繁体   English

如何在GoogleMaps中更新标记并识别标记位置

[英]How to Update Marker And Indentify Markers Positions In GoogleMaps

I am creating a cab booking android app. 我正在创建出租车预订Android应用程序。 Here i am adding marker on map by using webservice but the problem i am able to change position for example after updating markers from server old marker still remain. 在这里,我通过使用Web服务在地图上添加标记,但是问题仍然存在,例如,从服务器旧标记更新标记后,仍然可以更改位置。 so how can i identity old marker and remove it first? 所以我该如何识别旧标记并先将其删除?

public Map<String, Marker> cabsMarker = new HashMap<>();
public List<ServiceData> list = new ArrayList<>();
private GoogleMap mMap;



public class ServiceData {
    public String name;
    public LatLng location;

    public ServiceData(LatLng location, String name) {
        this.location = location;
        this.name = name;
    }
}
 public void add_all_real_time_cabs() throws NullPointerException {
    broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(GCMPushReceiverService.DATA_MESSAGE_STATUS_SUCCESS)) {


                try {
                    String message = intent.getStringExtra(GCMPushReceiverService.JSON_ARRAY_RESPONSE);


                    JSONArray jarr = new JSONArray(message);


                    for (int i = 0; i < jarr.length(); i++) {

                        JSONObject jsonObject = jarr.getJSONObject(i);


                        All_UserMapDetail driver = new All_UserMapDetail();
                        if (!jsonObject.isNull(GCMPushReceiverService.FIRST_NAME_DRIVER_KEY)) {
                            driver.setName(jsonObject.getString(GCMPushReceiverService.FIRST_NAME_DRIVER_KEY));
                            Log.e("driver name", driver.getName());

                        }
                        if (!jsonObject.isNull(GCMPushReceiverService.DRIVER_PHONE_KEY)) {
                            driver.setPhone(jsonObject.getString(GCMPushReceiverService.DRIVER_PHONE_KEY));
                        }
                        if (!jsonObject.isNull(GCMPushReceiverService.LAT_DRIVER_KEY)) {
                            driver.setLat(Double.parseDouble(jsonObject.getString(GCMPushReceiverService.LAT_DRIVER_KEY)));
                        }
                        if (!jsonObject.isNull(GCMPushReceiverService.LON_DRIVER_KEY)) {
                            driver.setLon(Double.parseDouble(jsonObject.getString(GCMPushReceiverService.LON_DRIVER_KEY)));

                            Log.e("hgcghcghc", String.valueOf(driver.getLat()));
                        }

                        ServiceData data = new ServiceData(new LatLng(driver.getLat(), driver.getLon()), driver.getName());



                        list.add(data);


                    }


                    refreshMarkers();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    };
}

and here is my refreshMarkers method. 这是我的refreshMarkers方法。

public void refreshMarkers () {
    Map<String, Marker> updatedMarkers = new HashMap<String, Marker>();
    for (ServiceData data : list) {
        // if marker exists move its location, if not add new marker
        Marker marker = cabsMarker.get(data.name);
        if (marker == null) {
            marker = mMap.addMarker(new MarkerOptions().position((data.location)).title(data.name));
        } else {
            marker.setPosition(data.location);
            cabsMarker.remove(data.name);
        }
        updatedMarkers.put(data.name, marker);
        Toast.makeText(getApplicationContext(), "jkbkjbl", Toast.LENGTH_LONG).show();
    }
    // all markers that are left in markers list need to be deleted from the map
    for (Marker marker : cabsMarker.values()) {
        marker.remove();
    }

    cabsMarker = updatedMarkers;
}

can anyone help me were i am wrong? 谁能帮助我我错了吗?

在添加新标记列表之前,应先清除标记列表,然后运行ur refreshmarker功能。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM