在地图上添加标记会使地图滞后
Adding markers onto the map makes the map lag
概述:应用程序在 Fragment 中有一张地图,Fragment 从房间数据库中检索标记的数据,然后将标记绘制到地图上。
问题:每当将标记绘制到地图上时,地图片段就会变得不稳定,并且在某些点对点击没有反应,一旦移除标记,地图的延迟就会得到修复。我不知道为什么标记使它变得不稳定,我怀疑这个问题与从数据库加载标记有关,但这只是一个假设。
获取标记并将其绘制到地图上的方法。
private void drawMarker(){
if (markersAreDrawn == false){
markerViewModel.getAllMarkers().observe(MapFragment.this, new Observer<List<MarkerObject>>() {
@Override
public void onChanged(List<MarkerObject> markerObjects) {
for (MarkerObject markerObject : markerObjects) {
if (checkedItems[0] == true && markerObject.getCategory().equals("Nature")) {
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
if (checkedItems[1] == true && markerObject.getCategory().equals("Abandoned")){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
if (checkedItems[2] == true && markerObject.getCategory().equals("Camping")){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
if (checkedItems[3] == true && markerObject.getCategory().equals("Sightseeing")){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
}
}
});
} markersAreDrawn = true;
}
然后在OnViewCreated()中调用的OnMapReadyCallback中执行drawMarker()方法。
我之前已经研究过这个问题几次,但我自己还没有弄明白。
非常感谢任何帮助。
确实地图滞后,上面有大量标记,但应该有数千个标记。可能是因为您多次将标记添加到同一位置。在绘制标记之前尝试清理地图。类似的东西:
...
@Override
public void onChanged(List<MarkerObject> markerObjects) {
<YOUR_GOOGLE_MAP_OBJECT_NAME>.clear();
for (MarkerObject markerObject : markerObjects) {
...
或者最好像 this answer of Hesam 那样将标记保存到列表中并对其进行管理(仅添加新标记等)。
概述:应用程序在 Fragment 中有一张地图,Fragment 从房间数据库中检索标记的数据,然后将标记绘制到地图上。
问题:每当将标记绘制到地图上时,地图片段就会变得不稳定,并且在某些点对点击没有反应,一旦移除标记,地图的延迟就会得到修复。我不知道为什么标记使它变得不稳定,我怀疑这个问题与从数据库加载标记有关,但这只是一个假设。
获取标记并将其绘制到地图上的方法。
private void drawMarker(){
if (markersAreDrawn == false){
markerViewModel.getAllMarkers().observe(MapFragment.this, new Observer<List<MarkerObject>>() {
@Override
public void onChanged(List<MarkerObject> markerObjects) {
for (MarkerObject markerObject : markerObjects) {
if (checkedItems[0] == true && markerObject.getCategory().equals("Nature")) {
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
if (checkedItems[1] == true && markerObject.getCategory().equals("Abandoned")){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
if (checkedItems[2] == true && markerObject.getCategory().equals("Camping")){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
if (checkedItems[3] == true && markerObject.getCategory().equals("Sightseeing")){
mMap.addMarker(new MarkerOptions()
.position(new LatLng(markerObject.getLatitude(), markerObject.getLongitude()))
.snippet(markerObject.getDescription())
.title(markerObject.getTitle()));
}
}
}
});
} markersAreDrawn = true;
}
然后在OnViewCreated()中调用的OnMapReadyCallback中执行drawMarker()方法。
我之前已经研究过这个问题几次,但我自己还没有弄明白。 非常感谢任何帮助。
确实地图滞后,上面有大量标记,但应该有数千个标记。可能是因为您多次将标记添加到同一位置。在绘制标记之前尝试清理地图。类似的东西:
...
@Override
public void onChanged(List<MarkerObject> markerObjects) {
<YOUR_GOOGLE_MAP_OBJECT_NAME>.clear();
for (MarkerObject markerObject : markerObjects) {
...
或者最好像 this answer of Hesam 那样将标记保存到列表中并对其进行管理(仅添加新标记等)。