首页 > 解决方案 > 尝试在上传到 android_app 的 .geojson 文件中显示属性数据

问题描述

我开始关注 mapbox 网站上提供的关于如何以 json 格式显示制图数据的教程,我可以毫无问题地显示地图。

我现在面临的挑战是我无法attribute data在这些地图中显示。

按照建议,我编辑了问题,代码如下:

public class MainActivity extends AppCompatActivity implements MapboxMap.OnMapClickListener {
    private MapView mapView;
    private MapboxMap mapboxMap;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Mapbox.getInstance(this, getString(R.string.access_token));

        setContentView(R.layout.activity_main);
        mapView = findViewById(R.id.mapview);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(@NonNull MapboxMap mapboxMap) {
                mapboxMap.setStyle(Style.TRAFFIC_DAY, new Style.OnStyleLoaded() {
                    @Override
                    public void onStyleLoaded(@NonNull Style style) {
                        VectorSource vectorSource = new VectorSource(
                                "Supports-source", "https://api.mapbox.com/v4/anis82.b8l0y56t.json?access_token="
                                + getString(R.string.access_token)
                        );
                        style.addSource(vectorSource);
                        CircleLayer circleLayer = new CircleLayer("Supports-style", "Supports-source");
                        circleLayer.setSourceLayer("SUPPORTS_HTA-BT-9n49es");
                        style.addLayer(circleLayer);
                    }
                });
            }
        });
    }
    @Override
    public boolean onMapClick(@NonNull LatLng point) {
        final PointF pixel = mapboxMap.getProjection().toScreenLocation(point);
        List<Feature> features = mapboxMap.queryRenderedFeatures(pixel,"SUPPORTS_HTA-BT-9n49es");
        if (features.size() > 0) {
            Feature feature = features.get(0);
            if (feature.properties() != null) {
                for (Map.Entry<String, JsonElement> entry : feature.properties().entrySet()) {
                    Log.d("TAG", String.format("%s = %s", entry.getKey(), entry.getValue()));
                }
            }
        }
        return false;
    }
    @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 onLowMemory() {
        super.onLowMemory();
        mapView.onLowMemory();
    }

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

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

标签: android-studiogismapbox-android

解决方案


你能多谈谈你的最终目标是什么吗?你是什​​么意思attribute data?运行上面的代码时,圆圈是否显示在地图上?你错过了某种数据?您的 logcat 中是否有任何与 Mapbox 相关的消息(在 logcat 中查找Mbgl)?

当您说attribute data时,您的意思是Log.d("TAG", String.format("%s = %s", entry.getKey(), entry.getValue()));单击地图时没有打印任何内容吗?那可能是因为您查询了错误的图层。

你有List<Feature> features = mapboxMap.queryRenderedFeatures(pixel,"SUPPORTS_HTA-BT-9n49es");. 您正在查询"SUPPORTS_HTA-BT-9n49es",但这是矢量图块中的一个图层。您应该查询"Supports-style"圆形图层,因为这是在地图上渲染的实际图层。这有点令人困惑,我知道。

如果甚至没有显示圆圈:

https://docs.mapbox.com/android/maps/examples/add-a-vector-tile-source/是使用VectorSource.

您在构建VectorSource对象时将访问令牌附加到 URI。看起来与https://docs.mapbox.com/help/glossary/tileset-id/#use-a-tileset-id-to-request-tilesets-directly中描述的相同

取而代之的是,尝试执行https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/styles/VectorSourceActivity中的 URI 语法.java#L50https://github.com/mapbox/mapbox-android-demo/blob/53651ce092d1dab1cbc32aefe3d95558f1b6f692/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/labs/BaseballSprayChartActivity.java#L139


推荐阅读