Я разбил 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")
возвращает пустой список. Из документации:
Возвращает пустой список, если карта или нижняя поверхность рендеринга были уничтожены.
Так как мы можем определить, что все необходимое уже загружено и отрендерено? Я проверяю, что карта и стиль загружены правильно. Какой шаг отсутствует? Доступен ли еще один обратный звонок?