【问题标题】:Adding markers onto the map makes the map lag在地图上添加标记会使地图滞后
【发布时间】:2021-10-18 00:47:51
【问题描述】:

概述:应用程序在 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() 方法。

我之前曾多次研究过这个问题,但我自己还没有弄清楚。 非常感谢任何和所有帮助。

【问题讨论】:

  • 我们在谈论多少个标记?
  • 目前大约有 20 个测试标记,但通过一些测试我发现问题出在逻辑上。

标签: android google-maps android-room google-maps-markers lag


【解决方案1】:

地图上确实有大量标记,但地图上应该有数千个标记。可能是因为您多次将标记添加到相同的位置。尝试在绘制标记之前清理地图。类似的东西:

...
@Override
public void onChanged(List<MarkerObject> markerObjects) {
    <YOUR_GOOGLE_MAP_OBJECT_NAME>.clear();
    for (MarkerObject markerObject : markerObjects) {
...

或者更好地保存标​​记以在Hesamthis 答案中列出并管理它(仅添加新标记等)。

【讨论】:

  • 我起初以为问题是绘制了重复的标记,但我认为我修复了这个错误,但后来修复出现了逻辑错误,它确实仍然绘制了重复的标记,这就是它滞后的原因。感谢您的帮助。
猜你喜欢
  • 2014-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多