Я пытаюсь расположить круглые маркеры поверх фигуры GeoJSON, используя Mapbox Android SDK. Когда я запускаю следующий код, я вижу только форму GeoJSON (я думаю, что круг рисуется ниже GeoJSON). Если я поставлю блок try / catch над кодом круга, приложение вылетает. Как бы я нарисовал круг над формой GeoJSON? (Я планирую нарисовать много маркеров поверх фигуры GeoJSON)
Моя попытка (это успешно рисует фигуру геойсона, но без круга)
mapboxMap.setStyle(Style.LIGHT, style -> {
circleManager = new CircleManager(mapView, mapboxMap, style);
CircleOptions circleOptions = new CircleOptions()
.withLatLng(new LatLng(0.0, 0.0))
.withCircleColor(ColorUtils.colorToRgbaString(Color.RED))
.withCircleRadius(12f)
.setDraggable(false);
circleManager.create(circleOptions);
try {
GeoJsonSource source = new GeoJsonSource("source-id", loadJsonFromAsset("building.geojson"));
FillLayer fillLayer = new FillLayer("layer-id", "source-id");
fillLayer.setProperties(
PropertyFactory.fillColor(Color.parseColor("#3bb2d0")),
PropertyFactory.fillOutlineColor(Color.BLACK));
mapboxMap.setStyle(new Style.Builder().withSource(source).withLayer(fillLayer));
} catch (Exception e) {
Log.e("failure", "failed to set add map layer", e);
}
});
Моя вторая попытка (это приводит к сбою приложения - см. Ниже)
mapboxMap.setStyle(Style.LIGHT, style -> {
try {
GeoJsonSource source = new GeoJsonSource("source-id", loadJsonFromAsset("building.geojson"));
FillLayer fillLayer = new FillLayer("layer-id", "source-id");
fillLayer.setProperties(
PropertyFactory.fillColor(Color.parseColor("#3bb2d0")),
PropertyFactory.fillOutlineColor(Color.BLACK));
mapboxMap.setStyle(new Style.Builder().withSource(source).withLayer(fillLayer));
} catch (Exception e) {
Log.e("failure", "failed to set add map layer", e);
}
circleManager = new CircleManager(mapView, mapboxMap, style);
CircleOptions circleOptions = new CircleOptions()
.withLatLng(new LatLng(0.0, 0.0))
.withCircleColor(ColorUtils.colorToRgbaString(Color.RED))
.withCircleRadius(12f)
.setDraggable(false);
circleManager.create(circleOptions);
});
аварийный выход
2019-01-17 14:32:14.087 27217-27217/com.nocompany.mapboxdemo E/Mbgl-MapChangeReceiver: Exception in onDidFinishLoadingStyle
java.lang.RuntimeException: The style has to be non-null and fully loaded.
at com.mapbox.mapboxsdk.plugins.annotation.AnnotationManager.<init>(AnnotationManager.java:77)
at com.mapbox.mapboxsdk.plugins.annotation.CircleManager.<init>(CircleManager.java:79)
at com.mapbox.mapboxsdk.plugins.annotation.CircleManager.<init>(CircleManager.java:56)
at com.mapbox.mapboxsdk.plugins.annotation.CircleManager.<init>(CircleManager.java:44)
at com.nocompany.mapboxdemo.MainActivity$1.lambda$onMapReady$0(MainActivity.java:116)
at com.nocompany.mapboxdemo.-$$Lambda$MainActivity$1$WjHCwDcEHlUWOHE7h-69Jk43tfY.onStyleLoaded(Unknown Source:4)
at com.mapbox.mapboxsdk.maps.MapboxMap.notifyStyleLoaded(MapboxMap.java:835)
at com.mapbox.mapboxsdk.maps.MapboxMap.onFinishLoadingStyle(MapboxMap.java:202)
at com.mapbox.mapboxsdk.maps.MapView$MapCallback.onDidFinishLoadingStyle(MapView.java:1152)
at com.mapbox.mapboxsdk.maps.MapChangeReceiver.onDidFinishLoadingStyle(MapChangeReceiver.java:194)
at com.mapbox.mapboxsdk.maps.NativeMapView.onDidFinishLoadingStyle(NativeMapView.java:979)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:325)
at android.os.Looper.loop(Looper.java:142)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Я использую MapBox SDK 7.0.0
Заранее спасибо!