如何在Android的Mapbox上添加带有标题和描述的自定义标记?

时间:2020-10-05 12:04:32

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

我想为地图上的每个标记添加标题和描述。现在,我在地图上添加标记,并通过GET调用从服务器获取数据,然后为每个对象创建标记。

public void onMapReady(@NonNull final MapboxMap mapboxMap) {

        MainActivity.this.mapboxMap = mapboxMap;

        StringRequest request = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {

                    JSONArray jsonArray = new JSONArray(response);
                    List<Feature> symbolLayerIconFeatureList = new ArrayList<>();

                    for(int i = 0; i < jsonArray.length(); i++){
                        JSONObject crag = jsonArray.getJSONObject(i);

                        String description = crag.getString("descrizione")
                        String name = crag.getString("nome");
                        Double lng = crag.getDouble("longitudine");
                        Double lat = crag.getDouble("latitudine");

                        symbolLayerIconFeatureList.add(Feature.fromGeometry(
                               Point.fromLngLat(lng, lat)));

                    }

                    mapboxMap.setStyle(new Style.Builder().fromUri("mapbox://styles/mapbox/cjf4m44iw0uza2spb3q0a7s41")

                            .withImage(ICON_ID, BitmapFactory.decodeResource(
                                    MainActivity.this.getResources(), R.drawable.icona_falesia))

                            .withSource(new GeoJsonSource(SOURCE_ID,
                                    FeatureCollection.fromFeatures(symbolLayerIconFeatureList)))

                            .withLayer(new SymbolLayer(LAYER_ID, SOURCE_ID)
                                    .withProperties(
                                            iconImage(ICON_ID),
                                            iconAllowOverlap(true),
                                            iconIgnorePlacement(true)
                                    )
                            ), new Style.OnStyleLoaded() {
                        @Override
                        public void onStyleLoaded(@NonNull Style style) {

                        }
                    });
                } catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        mQueue.add(request);

    }

这是我的onMapReady函数,其中获取数据并创建标记。如何为每个标记添加标题和描述?

1 个答案:

答案 0 :(得分:0)

如果您只想与{一起显示文本,则还需要使用textField()textOffset()textIgnorePlacement()textAllowOverlap()textField() {1}}图标。为每个SymbolLayer添加名称和描述是使其正常工作的关键。

我已经修改https://docs.mapbox.com/android/maps/examples/marker-symbol-layer/来创建在https://i.imgur.com/5LzSzRf.mp4看到的GIF。您可以查看代码中发生了什么,然后在GET Feature回调中对其进行调整以使其与您的实现相匹配。

onResponse()

如果要创建信息窗口,请参见https://docs.mapbox.com/android/maps/examples/symbol-layer-info-window/

相关问题