MapBox地图怎么去掉地名显示

 MapBox地图怎么去掉地名显示,这个需求我之前也没遇到过,于是今天就尝试了一番,总结一下。

一.  首先尝试查找com.mapbox.mapboxsdk.maps.UiSettings源码

查看后发现根本没有地图文字显示相关设置,全部都是地图的操作设置,例如旋转手势等。

第一步失败!

二. 分析地图是如果显示地名的。

Mapbox现在都是用Layer添加覆盖物,所以判断地名也是通过Layer添加上去的,而添加Layer必然要用到Style。Style中通过

HashMap保存 许许多多的Layer。

1. com.mapbox.mapboxsdk.maps.Style源码

/**
 * The proxy object for current map style.
 * <p>
 * To create new instances of this object, create a new instance using a {@link Builder} and load the style with
 * MapboxMap. This object is returned from {@link MapboxMap#getStyle()} once the style
 * has been loaded by underlying map.
 * </p>
 */
@SuppressWarnings("unchecked")
public class Style {

  private final NativeMap nativeMap;
  private final HashMap<String, Source> sources = new HashMap<>();
  private final HashMap<String, Layer> layers = new HashMap<>();
  private final HashMap<String, Bitmap> images = new HashMap<>();
  private final Builder builder;
  private boolean fullyLoaded;
}

2.获取Style

mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {
                mapboxMap.setStyle(Style.SATELLITE_STREETS, new Style.OnStyleLoaded() {
                    @Override
                    public void onStyleLoaded(@NonNull Style style) {
                        //这里就是我们需要的style
                    }
                });
            }
        });

3.获取style包含所有Layers

mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {
                mapboxMap.setStyle(Style.SATELLITE_STREETS, new Style.OnStyleLoaded() {
                    @Override
                    public void onStyleLoaded(@NonNull Style style) {
                        //这里就是我们需要的style
                        List<Layer> layers = style.getLayers();
                        for (Layer lay:layers) {
                            //设置Layer文字颜色透明
                           lay.setProperties(
                               PropertyFactory.textColor(Color.TRANSPARENT)
                            );
                           lay.setProperties(
                                PropertyFactory.textHaloColor(Color.TRANSPARENT)
                            );
                            //打印所有LayerId
                            Log.d("Style==>" , "LayerId: " + lay.getId());
                        }
                    }
                });
            }
        }); 

通过上面代码就可以隐藏地图上的文字,顺便打印所有Layer的Id

Style==>LayerId: background
Style==>LayerId: satellite
Style==>LayerId: tunnel-primary-secondary-tertiary-case
Style==>LayerId: tunnel-major-link-case
Style==>LayerId: tunnel-motorway-trunk-case
Style==>LayerId: tunnel-path
Style==>LayerId: tunnel-steps
Style==>LayerId: tunnel-major-link
Style==>LayerId: tunnel-pedestrian
Style==>LayerId: tunnel-primary-secondary-tertiary
Style==>LayerId: tunnel-oneway-arrow-blue
Style==>LayerId: tunnel-motorway-trunk
Style==>LayerId: tunnel-oneway-arrow-white
Style==>LayerId: ferry
Style==>LayerId: ferry-auto
Style==>LayerId: road-pedestrian-case
Style==>LayerId: road-street-low
Style==>LayerId: road-street-case
Style==>LayerId: road-secondary-tertiary-case
Style==>LayerId: road-primary-case
Style==>LayerId: road-major-link-case
Style==>LayerId: road-motorway-trunk-case
Style==>LayerId: road-path
Style==>LayerId: road-steps
Style==>LayerId: road-major-link
Style==>LayerId: road-pedestrian
Style==>LayerId: road-street
Style==>LayerId: road-secondary-tertiary
Style==>LayerId: road-primary
Style==>LayerId: road-oneway-arrow-blue
Style==>LayerId: road-motorway-trunk
Style==>LayerId: road-oneway-arrow-white
Style==>LayerId: bridge-pedestrian-case
Style==>LayerId: bridge-primary-secondary-tertiary-case
Style==>LayerId: bridge-major-link-case
Style==>LayerId: bridge-motorway-trunk-case
Style==>LayerId: bridge-path
Style==>LayerId: bridge-steps
Style==>LayerId: bridge-major-link
Style==>LayerId: bridge-pedestrian
Style==>LayerId: bridge-primary-secondary-tertiary
Style==>LayerId: bridge-oneway-arrow-blue
Style==>LayerId: bridge-motorway-trunk
Style==>LayerId: bridge-major-link-2-case
Style==>LayerId: bridge-motorway-trunk-2-case
Style==>LayerId: bridge-major-link-2
Style==>LayerId: bridge-motorway-trunk-2
Style==>LayerId: bridge-oneway-arrow-white
Style==>LayerId: aerialway
Style==>LayerId: admin-1-boundary-bg
Style==>LayerId: admin-0-boundary-bg
Style==>LayerId: admin-1-boundary
Style==>LayerId: admin-0-boundary
Style==>LayerId: admin-0-boundary-disputed
Style==>LayerId: road-label
Style==>LayerId: road-number-shield
Style==>LayerId: road-exit-shield
Style==>LayerId: waterway-label
Style==>LayerId: natural-line-label
Style==>LayerId: natural-point-label
Style==>LayerId: water-line-label
Style==>LayerId: water-point-label
Style==>LayerId: poi-label
Style==>LayerId: transit-label
Style==>LayerId: airport-label
Style==>LayerId: settlement-subdivision-label
Style==>LayerId: settlement-label
Style==>LayerId: state-label
Style==>LayerId: country-label

透过名字就可以看出每个Id对应在地图上的显示,例如road开头就是道路相关的。

第二步成功!

最后可以自己通过id获取对应的Layer,进行修改 。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值