【问题标题】:What is the best way to add markers on MapBox?在 MapBox 上添加标记的最佳方法是什么?
【发布时间】:2019-12-27 11:07:54
【问题描述】:

众所周知,mapbox.addMarker() 已被弃用! 我试图找出添加使用 Symbol Layer

的标记的新方法

我正在使用此代码,它对我有用!但是每次我想添加标记时它都会重新定义地图的样式

代码如下:

 //Add Marker to the Map
    public void addMarker(@NonNull LatLng point) {
        Feature feature = Feature.fromGeometry(Point.fromLngLat(point.getLongitude(), point.getLatitude()));
        mapboxMap
                .setStyle(new Style.Builder()
                        .fromUri("mapbox://styles/mapbox/cjf4m44iw0uza2spb3q0a7s41")
                        .withImage(ICON_ID, marker)
                        .withSource(new GeoJsonSource(SOURCE_ID, feature))
                        .withLayer(new SymbolLayer(LAYER_ID, SOURCE_ID)
                                .withProperties(PropertyFactory.iconImage(ICON_ID),
                                        iconAllowOverlap(true),
                                        iconIgnorePlacement(true),
                                        iconOffset(new Float[]{0f, -9f}))));

    }

所以,我想知道在最新的 MapBox SDK 8.5.0

上是否有正确或更好的方法来添加标记

谢谢!

【问题讨论】:

    标签: java android mapbox mapbox-android mapbox-marker


    【解决方案1】:
    mapboxMap.setStyle(Style.MAPBOX_STREETS, new Style.OnStyleLoaded() {
                        @Override
                        public void onStyleLoaded(@NonNull final Style style) {
                         AddSanciangkoStreet(style);
                         SanciangkoStreetMarker();
                 }
      }
    
    private void AddSanciangkoStreet(@NonNull Style style) {
            style.addImage("sanciangko-street",
                    BitmapUtils.getBitmapFromDrawable(getResources().getDrawable(R.drawable.floodicon)));
    
            style.addSource(new GeoJsonSource("sanciangkoFlood1-source-id"));
    
            style.addLayer(new SymbolLayer("sanciangkoFlood1-layer-id", "sanciangkoFlood1-source-id").withProperties(
                    iconImage("sanciangko-street"),
                    iconIgnorePlacement(true),
                    iconAllowOverlap(true),
                    iconSize(1f)
            ));
    }
    
    private void SanciangkoStreetMarker() {
            if (map.getStyle() != null) {
                GeoJsonSource sanciangkoFlood1 = map.getStyle().getSourceAs("sanciangkoFlood1-source-id");
                if (sanciangkoFlood1 != null) {
                    sanciangkoFlood1.setGeoJson(FeatureCollection.fromFeature(
                            Feature.fromGeometry(Point.fromLngLat(123.895801, 10.297237))
                    ));
                }
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-10
      • 2013-08-21
      • 1970-01-01
      • 2022-01-18
      • 2022-10-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多