首页 > 解决方案 > 从数据库创建 mapbox 标记

问题描述

我是 android 和 java 的新手,我正在使用数据库和 Mapbox Map 在 Android Studio 中编写我的第一个应用程序。我使用 Room 持久性库在 .SQLite 中几乎没有活动和数据库。现在我正在编写一个 Mapbox 活动。

我正在编写一个显示地图的活动。该地图显示了几个标记。现在我想在点击后实现带有每个标记信息(例如地址、门牌号、坐标)的小注释。目前,标记本身是通过使用 for 循环遍历 List 来创建的。

如何在没有 geoJSON 文件但访问 SQLite 数据库的情况下创建注释窗口。可能吗?我发现只有这样的例子:https ://docs.mapbox.com/android/maps/examples/symbol-layer-info-window/?size= n_10_n 它使用了一个geoJSON文件,它被转换为一个列表,但我只有一个列表。

以 SQLite 数据库为源实现示例的最佳方法是什么?先感谢您!

SQLite 数据库


@Override
    public void onMapReady(@NonNull final MapboxMap mapboxMap) {
        MapboxActivity.this.mapboxMap = mapboxMap;

        mapboxMap.setStyle(
                new Style.Builder().fromUri("mapbox://styles/aroid435/ckiohlr9a0c3m17nq6tx5ajjs")
                
                ,
                new Style.OnStyleLoaded() {
                    @Override
                    public void onStyleLoaded(@NonNull Style style) {
                        enableLocationComponent(style);
                        SymbolManager symbolManager = new SymbolManager(mapView, mapboxMap, style);
                        mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder().target(new LatLng(51.051877, 13.741517)).zoom(10.5).build()));


                        for (int i= 0; i < stolpersteine_list.size() ; i = i+1 ) {
                        mapboxMap.getStyle().addImage("my-star-marker", BitmapFactory.decodeResource(getResources(), R.drawable.rectangle));
                        symbolManager.create(new SymbolOptions()
                                .withLatLng(new LatLng( stolpersteine_list.get(i).getLatitude(),stolpersteine_list.get(i).getLongitude()))
                                .withIconImage("my-star-marker")
                                .withIconAnchor("bottom"));
                        
                        }

                    }
                });
    } // end of onMapReady
´´´

标签: javaandroidmapboxmapbox-android

解决方案


我找到了方法,如何将我的数据库转换为 mapbox 列表。这是我的代码:

    @Override
    public void onMapReady(@NonNull final MapboxMap mapboxMap) {
        MapboxActivity.this.mapboxMap = mapboxMap;

        List<Feature> symbolLayerIconFeatureList = new ArrayList<>();
        Log.d("tg", String.valueOf(symbolLayerIconFeatureList));
        for (int i = 0; i < stolpersteine_list.size(); i = i + 1) {
            symbolLayerIconFeatureList.add(Feature
                    .fromGeometry(Point.fromLngLat(stolpersteine_list.get(i).getLongitude(), stolpersteine_list.get(i).getLatitude())));
            Log.d("tag", String.valueOf(symbolLayerIconFeatureList));
        }


        mapboxMap.setStyle(
                new Style.Builder().fromUri("mapbox://styles/aroid435/ckiohlr9a0c3m17nq6tx5ajjs")
                        .withSource(new GeoJsonSource(SOURCE_ID,
                                FeatureCollection.fromFeatures(symbolLayerIconFeatureList)))
                        .withImage(ICON_ID, BitmapFactory.decodeResource(
                                MapboxActivity.this.getResources(), R.drawable.rectangle))

                        .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) {

                            enableLocationComponent(style);
                            SymbolManager symbolManager = new SymbolManager(mapView, mapboxMap, style);
                            mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder().target(new LatLng(51.051877, 13.741517)).zoom(10.5).build()));



                    }
                });
    } // end of onMapReady

但现在我不知道如何将属性添加到一个点。这样我只能对标记进行可视化,但我不能将其他值添加到列表并绘制注释窗口。我不能在我的 for 循环中使用 addStringProperty(String key, String value) 或 addProperty(String key, com.google.gson.JsonElement value),因为我收到错误:非静态方法'addStringProperty(java.lang. String, java.lang.String)' 不能从静态上下文中引用。

https://docs.mapbox.com/archive/android/java/api/libjava-geojson/2.1.0/com/mapbox/services/commons/geojson/Feature.html

有人知道怎么做吗?


推荐阅读