java - 从数据库创建 mapbox 标记
问题描述
我是 android 和 java 的新手,我正在使用数据库和 Mapbox Map 在 Android Studio 中编写我的第一个应用程序。我使用 Room 持久性库在 .SQLite 中几乎没有活动和数据库。现在我正在编写一个 Mapbox 活动。
我正在编写一个显示地图的活动。该地图显示了几个标记。现在我想在点击后实现带有每个标记信息(例如地址、门牌号、坐标)的小注释。目前,标记本身是通过使用 for 循环遍历 List 来创建的。
如何在没有 geoJSON 文件但访问 SQLite 数据库的情况下创建注释窗口。可能吗?我发现只有这样的例子:https ://docs.mapbox.com/android/maps/examples/symbol-layer-info-window/?size= n_10_n 它使用了一个geoJSON文件,它被转换为一个列表,但我只有一个列表。
以 SQLite 数据库为源实现示例的最佳方法是什么?先感谢您!
@Override
public void onMapReady(@NonNull final MapboxMap mapboxMap) {
MapboxActivity.this.mapboxMap = mapboxMap;
mapboxMap.setStyle(
new Style.Builder().fromUri("mapbox://styles/aroid435/ckiohlr9a0c3m17nq6tx5ajjs")
,
new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
enableLocationComponent(style);
SymbolManager symbolManager = new SymbolManager(mapView, mapboxMap, style);
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder().target(new LatLng(51.051877, 13.741517)).zoom(10.5).build()));
for (int i= 0; i < stolpersteine_list.size() ; i = i+1 ) {
mapboxMap.getStyle().addImage("my-star-marker", BitmapFactory.decodeResource(getResources(), R.drawable.rectangle));
symbolManager.create(new SymbolOptions()
.withLatLng(new LatLng( stolpersteine_list.get(i).getLatitude(),stolpersteine_list.get(i).getLongitude()))
.withIconImage("my-star-marker")
.withIconAnchor("bottom"));
}
}
});
} // end of onMapReady
´´´
解决方案
我找到了方法,如何将我的数据库转换为 mapbox 列表。这是我的代码:
@Override
public void onMapReady(@NonNull final MapboxMap mapboxMap) {
MapboxActivity.this.mapboxMap = mapboxMap;
List<Feature> symbolLayerIconFeatureList = new ArrayList<>();
Log.d("tg", String.valueOf(symbolLayerIconFeatureList));
for (int i = 0; i < stolpersteine_list.size(); i = i + 1) {
symbolLayerIconFeatureList.add(Feature
.fromGeometry(Point.fromLngLat(stolpersteine_list.get(i).getLongitude(), stolpersteine_list.get(i).getLatitude())));
Log.d("tag", String.valueOf(symbolLayerIconFeatureList));
}
mapboxMap.setStyle(
new Style.Builder().fromUri("mapbox://styles/aroid435/ckiohlr9a0c3m17nq6tx5ajjs")
.withSource(new GeoJsonSource(SOURCE_ID,
FeatureCollection.fromFeatures(symbolLayerIconFeatureList)))
.withImage(ICON_ID, BitmapFactory.decodeResource(
MapboxActivity.this.getResources(), R.drawable.rectangle))
.withLayer(new SymbolLayer(LAYER_ID, SOURCE_ID)
.withProperties(
iconImage(ICON_ID),
iconAllowOverlap(true),
iconIgnorePlacement(true)
)
), new Style.OnStyleLoaded() {
@Override
public void onStyleLoaded(@NonNull Style style) {
enableLocationComponent(style);
SymbolManager symbolManager = new SymbolManager(mapView, mapboxMap, style);
mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition.Builder().target(new LatLng(51.051877, 13.741517)).zoom(10.5).build()));
}
});
} // end of onMapReady
但现在我不知道如何将属性添加到一个点。这样我只能对标记进行可视化,但我不能将其他值添加到列表并绘制注释窗口。我不能在我的 for 循环中使用 addStringProperty(String key, String value) 或 addProperty(String key, com.google.gson.JsonElement value),因为我收到错误:非静态方法'addStringProperty(java.lang. String, java.lang.String)' 不能从静态上下文中引用。
有人知道怎么做吗?
推荐阅读
- gradle - java.util.zip.ZipException:重复条目:com/google/common/annotations/Beta.class
- list - 如何匹配列表中列表中的相同字符并分别导出结果
- php - 无法在我的数据库中正确输入日期类型数据
- java - 如何生成具有动态属性名称的类文件
- java - Eclipse:修复“类型参数的冗余规范”导致错误
- rabbitmq - RabbitMQ / AMQP 中的消息版本控制?
- mysql - 无法使用 mysql 启动应用程序 jhipster
- vba - Columns(i).Delete Shift:=xlToLeft 给我错误
- google-apps-script - 使用数组索引将值写入不同的工作表行
- android - 安卓+改造2