在 MapBox 上隐藏和显示标记

Posted

技术标签:

【中文标题】在 MapBox 上隐藏和显示标记【英文标题】:Hide and show markers on MapBox 【发布时间】:2017-06-28 09:07:42 【问题描述】:

当我开始这个时,我认为这是一个相当微不足道的功能,但我一直在努力实现这一目标:

android 上的 MapBox 地图上,我想在缩小(以特定缩放级别)时隐藏所有标记,并在放大时再次显示它们。

我找不到任何选项来隐藏(将可见性设置为 false)标记。所以我删除它们并再次添加它们:

private void hideMarkers() 
    if (!markersHidden) 
        mapBoxMap.clear();
        markersHidden = true;
    


private void showMarkers() 
    if (markersHidden) 
        markersHidden = false;
        for (Point point : markerMap.values()) 
            addMapMarker(point);
        
    


public void addMapMarker(Point point) 
    if (point == null) return;

    markerMap.put(point.id, point);
    if (markersHidden) return;

    MarkerOptions markerOptions = new MarkerOptions()
            .position(new LatLng(point.location.latitude, point.location.longitude))
            .setSnippet(point.id)
            .icon(IconUtils.drawableToIcon(getContext(), presenter.getMapIcon(point.provider).getMapIcon(point)))
            .title(point.name);

    mapBoxMap.addMarker(markerOptions);

markerMap 是一个 HashMap,我在其中保存我的 Point 引用。 这些方法做他们应该做的事情。 markerMap 保留引用,并将它们正确添加到地图中。 但是,它们没有显示出来。

为什么它们在添加到地图后没有显示在地图上? 我该怎么做才能再次显示标记? 除了删除和添加标记之外,还有其他方法可以实现隐藏和显示标记吗?

我使用的 MapBox 版本是com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.2@aar

【问题讨论】:

【参考方案1】:

我认为只有使用MarkerView 才能设法隐藏和显示标记。作为概念教授,这里有一段代码显示了它是如何通过 setVisibility 方法工作的

markerView = map.addMarker(new MarkerViewOptions()
                    .anchor(.5f, .5f)
                    .icon(IconFactory.getInstance(getApplicationContext()).fromResource(R.drawable.mapbox_marker_icon_default))
                    .position(stuttgartLoc));

            CameraUpdate cameraNewPosition = CameraUpdateFactory
                    .newLatLngZoom(stuttgartLoc, 17);
            map.animateCamera(cameraNewPosition);

            new Handler().postDelayed(new Runnable() 
                @Override
                public void run() 
                    markerView.setVisible(false);
                
            , 5000);

            new Handler().postDelayed(new Runnable() 
                @Override
                public void run() 
                    markerView.setVisible(true);
                
            , 10000);

【讨论】:

以上是关于在 MapBox 上隐藏和显示标记的主要内容,如果未能解决你的问题,请参考以下文章

隐藏和显示所有标记

如何隐藏百度地图的上默认的文字标签

如何在谷歌地图中显示集群时隐藏标记

如何在 Android 中使用 Google 地图按类别隐藏/显示标记组?

悬停时显示/隐藏下拉菜单 Flutter for web

如何使用markerwithlabel隐藏或禁用谷歌地图上的默认标记