Android地图刷新标记的位置

时间:2015-05-30 16:42:36

标签: android google-maps android-activity refresh google-maps-markers

我想每5秒在地图上刷新大约50-100个标记的位置。它从Web服务获取位置数据,一切正常。问题是,当删除所有标记并创建新标记时,我在Galaxy S5上遇到了巨大的延迟。

还有其他方法可以移动标记吗?我不认为删除它们并重新创建它们是个好主意。

我看到其他应用程序使用地图api和刷新标记位置,但没有任何延迟(例如FlightRadar24)。如何解决这个问题?

更新: 我正在使用下面答案中的代码,但它仍然每次都会重新创建标记。有人知道为什么吗?

我的ServiceData类:

public static class ServiceData {
    String ID;
    String title;
    String snippet;
    float hue;
    LatLng latlon;

    ServiceData(String id, String title, String snippet, float hue, LatLng latlon) {
        this.ID = id;
        this.title = title;
        this.snippet = snippet;
        this.hue = hue;
        this.latlon = latlon;
    }
}

每次更新标记时,我都会调用itemList.clear();(包含ServiceData类)来清除它。

然后我正在使用 itemList.add(new ServiceData(id, line, snippet, hue, new LatLng(lat, lon));将项目添加到其中。

1 个答案:

答案 0 :(得分:0)

首次在地图上添加标记时,还要将它们添加到某些Mapmarker.setPosition(latlng);(这取决于您要检索的数据,以及如何识别标记),然后当您必须刷新标记位置不要重新创建标记,而是使用public class ServiceData { String id; LatLng latlng; } GoogleMap gmap; public Map<String, Marker> markers = new HashMap<String, Marker>(); public List<ServiceData> list = new ArrayList<ServiceData>(); 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 = markers.get(data.id); if (marker == null) { marker = gmap.addMarker(new MarkerOptions().position(data.latlng)); } else { marker.setPosition(data.latlng); markers.remove(data.id); } updatedMarkers.put(data.id, marker); } // all markers that are left in markers list need to be deleted from the map for (Marker marker : markers.values()) { marker.remove(); } markers = updatedMarkers; }

将其位置设置为新值

更新地图上标记位置的代码示例:

APPPATH . 'libraries/Qrcode.php'