Попытка отобразить данные атрибута в файле .geo json, загруженном в android_app - PullRequest
0 голосов
/ 16 апреля 2020

Я начал следовать учебным пособиям, представленным на веб-сайте mapbox, по отображению картографических данных c в формате 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);
    }
}

1 Ответ

0 голосов
/ 16 апреля 2020

Можете ли вы сказать больше о своей конечной цели? Что вы подразумеваете под attribute data? Круги отображаются на карте, когда вы запускаете код выше? Вам не хватает каких-то данных? Любые сообщения, связанные с Mapbox, в вашем logcat (ищите Mbgl в logcat)?

Когда вы говорите attribute data, вы имеете в виду, что при нажатии * 1006 ничего не печатается с 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-direct

Вместо этого попробуйте выполнить синтаксис URI, видимый в https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/styles/VectorSourceActivity.java#L50 и https://github.com/mapbox/mapbox-android-demo/blob/53651ce092d1dab1cbc32aefe3d95558f1b6f692/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroiddemo/examples/labs/BaseballSprayChartActivity.java#L139.

...