我想每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));
将项目添加到其中。
答案 0 :(得分:0)
首次在地图上添加标记时,还要将它们添加到某些Map
或marker.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'