MapBox - когда безопасно использовать queryRenderedFeatures ()? - PullRequest
0 голосов
/ 23 апреля 2019

Я разбил SelectBuildingActivity из официального репозитория MapBox на очень простой пример, в котором я хочу рисовать здания из предопределенных точек:

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    private MapView mapView;

    private LatLng buildingPoint = new LatLng(37.791298, -122.396388);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Mapbox access token is configured here. This needs to be called either in your application
        // object or in the same activity which contains the mapview.
        Mapbox.getInstance(this, getString(R.string.access_token));

        // This contains the MapView in XML and needs to be called after the access token is configured.
        setContentView(R.layout.activity_main);

        mapView = findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);
        mapView.getMapAsync(this);
    }

    @Override
    public void onMapReady(@NonNull final MapboxMap mapboxMap) {
        mapboxMap.setStyle(Style.LIGHT, new Style.OnStyleLoaded() {
            @Override
            public void onStyleLoaded(@NonNull Style style) {
                style.addSource(new GeoJsonSource("source-id"));

                style.addLayer(new FillLayer("layer-id", "source-id").withProperties(
                        PropertyFactory.fillColor(Color.parseColor("#8A8ACB"))
                ));

                final PointF finalPoint = mapboxMap.getProjection().toScreenLocation(buildingPoint);
                //TODO how can we check if everything is rendered and ready to use?
                List<Feature> features = mapboxMap.queryRenderedFeatures(finalPoint, "building");
                if (features.size() > 0) {
                    GeoJsonSource selectedBuildingSource = style.getSourceAs("source-id");
                    if (selectedBuildingSource != null) {
                        selectedBuildingSource.setGeoJson(FeatureCollection.fromFeatures(features));
                    }
                }
            }
        });
    }
   //Overridden lifecycle methods would be here
}

Теперь mapboxMap.queryRenderedFeatures(finalPoint, "building") возвращает пустой список. Из документации:

Возвращает пустой список, если карта или нижняя поверхность рендеринга были уничтожены.

Так как мы можем определить, что все необходимое уже загружено и отрендерено? Я проверяю, что карта и стиль загружены правильно. Какой шаг отсутствует? Доступен ли еще один обратный звонок?

...