java - 为什么动态添加的符号在 Mapbox 中显示为灰色
问题描述
当我点击屏幕时,一个标记会添加到 Mapbox 地图的中间。第一个标记按预期显示。但是,一旦我添加第二个标记,标记就会显示为灰色。
这是我用来创建符号源和符号层的代码,以及 onMapClickListener,其中符号源的特征会使用新标记进行更新。所有这些代码都在 onStyleLoaded 方法中。
//Create the symbol source
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_map_marker_blue, null);
Bitmap marker = BitmapUtils.getBitmapFromDrawable(drawable);
style.addImage(BLUE_MARKER_IMAGE, marker);
GeoJsonSource geoJsonSourceSymbol = new GeoJsonSource(SYMBOL_SOURCE_ID);
style.addSource(geoJsonSourceSymbol);
//Create the symbol layer
symbolLayer = new SymbolLayer(SYMBOL_LAYER_ID, SYMBOL_SOURCE_ID);
symbolLayer.setProperties(iconImage(BLUE_MARKER_IMAGE), iconOffset(new Float[] {0f, -10f}));
style.addLayer(symbolLayer);
mapboxMap.addOnMapClickListener(new MapboxMap.OnMapClickListener() {
@Override
public boolean onMapClick(@NonNull LatLng point) {
final LatLng mapTargetLatLng = mapboxMap.getCameraPosition().target;
Point mapTarget = Point.fromLngLat(mapTargetLatLng.getLongitude(),mapTargetLatLng.getLatitude());
pointList.add(mapTarget);
featureList.add(Feature.fromGeometry(mapTarget));
if (style.getLayer(SYMBOL_LAYER_ID) != null) {
GeoJsonSource geoJsonSourceSymbol = style.getSourceAs(SYMBOL_SOURCE_ID);
if (geoJsonSourceSymbol != null) {
geoJsonSourceSymbol.setGeoJson(FeatureCollection.fromFeatures(featureList));
}
}
return true;
}
});
是我做错了什么还是无法使用数据驱动的样式动态添加符号?
解决方案
你在用模拟器吗?Mapbox 团队已经知道SymbolLayer
模拟设备上的渲染问题:
https://github.com/mapbox/mapbox-gl-native/issues/10829
https://github.com/mapbox/mapbox-plugins-android/issues/1082
推荐阅读
- flutter - 颤振中的问题。Firebase 上一个版本和上一个版本身份验证之间的冲突
- express - 无法在 Express 中使用 Mongoose 连接到 MongoDB Atlas
- angular - 提供角度构建时出现非法状态问题中的错误
- python - 如何显示另一个窗口
- python - 如何在字符串匹配期间捕获所有特殊字符?
- ios - 如何在 Cordova for iOS 中本地化应用程序名称?
- javascript - 如何设置自定义控件的样式以显示在原生 html5 视频控件旁边
- c++ - C ++计算树结构中的对象数量
- reactjs - 加载数据时显示加载程序图标
- node.js - npm run dev 函数在我的 ubuntu 操作系统中出现错误