从数据库创建mapbox标记

myzjeezk  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(349)

我是android和java的新手,我正在androidstudio中用数据库和mapboxMap编写我的第一个应用程序。我在使用room持久性库的.sqlite中有一些活动和数据库。现在我正在编写一个mapbox活动。
我正在编写一个显示Map的活动。这张Map显示了几个标记。现在,我想在单击后实现带有每个标记信息(例如地址、门牌号、坐标)的小注解。此时,标记本身是通过遍历带有for循环的列表来创建的。
如何在没有geojson文件的情况下创建注解窗口,但要访问sqlite数据库。有可能吗?我只找到这样的例子:https://docs.mapbox.com/android/maps/examples/symbol-layer-info-window/?size=n_10_n 它使用一个geojson文件,它被转换成一个列表,但我只有一个列表。
如何以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
´´´
p8ekf7hl

p8ekf7hl1#

我想办法,如何把我的数据库转换成Map框列表。这是我的密码:

@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
有人知道怎么做吗?

相关问题