首页 > 解决方案 > 在mapbox android中将数字添加到标记

问题描述

我试图弄清楚如何在mapbox中以编程方式向标记添加数字以获得下图的结果

带有数字的标记

这是显示一些标记的地图代码

public class DepartMissionFragment extends Fragment {
    private MapView mapView;

    private static final String TAG = "DirectionsActivity";


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        Mapbox.getInstance(requireActivity(), getString(R.string.access_token));
        View view  = inflater.inflate(R.layout.fragment_mission_depart, container, false);

        mapView = view.findViewById(R.id.mapView20);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {

                mapboxMap.addMarker(new MarkerOptions()
                        .position(new LatLng(33.589886, -7.603869))
                        .title("marker one"));
// It is possible to use .setIcon() to get a custom icon from ressources


                mapboxMap.addMarker(new MarkerOptions()
                        .position(new LatLng(33.589790, -7.603989))
                        .title("marker two"));

                mapboxMap.addMarker(new MarkerOptions()
                        .position(new LatLng(33.589190, -7.603089))
                        .title("marker three"));


                mapboxMap.addMarker(new MarkerOptions()
                        .position(new LatLng(33.588790, -7.603289))
                        .title("etc.."));

                mapboxMap.addMarker(new MarkerOptions()
                        .position(new LatLng(33.580790, -7.603989))
                        .title("etc...."));
                mapboxMap.setStyle(getString(R.string.navigation_guidance_day), new Style.OnStyleLoaded() {

                    @Override
                    public void onStyleLoaded(@NonNull Style style) {


                    }
                });

            }
        });
        return view;
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
    }

    @Override
    public void onStart() {
        super.onStart();
        mapView.onStart();
    }

    @Override
    public void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
        mapView.onStop();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }
}

我正在寻找一种为标记提供数字的方法,对我来说正确的方法是从 drawable 添加自定义标记。

欢迎任何其他方法。

标签: javamapboxmapbox-androidmapbox-marker

解决方案


您可以使用符号层从存储为 GeoJSON 要素的坐标中添加图标,而不是使用该MapboxMap#addMarker方法显示标记并依赖于可绘制资源,如适用于 Android 的 Mapbox Maps SDK 的此示例所示。

将每个Feature代表坐标添加到GeoJSON对象时,您可以向每个对象添加一个属性,其中包含要在该坐标的标记上显示的数字Featureproperties然后,除了示例中所示的iconImage添加之外SymbolLayer#setProperties,您还可textField以为每个由添加到 GeoJSON 的属性填充的符号添加一个。此符号图层聚类示例显示了应用于聚类用例的类似工作流。集群示例和您的实现之间的区别主要在于,您将从为坐标指定的 GeoJSON 属性中获取它,而不是从集群计数中获取要显示的数字。


推荐阅读