在最新的 MapBox SDK 6.7 中旋转和更改标记的位置

2023-12-11

Mapbox Android SDK:6.7.0

我们正在开发的应用程序的要求是,我们必须在不同的 LatLng 位置添加多个标记,并使用一些方位旋转它们。在旧的mapbox版本(4.2.1)中,我们可以毫无问题地做到这一点。

////Working code with MapBox SDK 4.2.1////
MarkerViewOptions markerViewOptions = new MarkerViewOptions();
        IconFactory iconFactory = IconFactory.getInstance(this);
        Icon arrowIcon = iconFactory.fromResource(R.drawable.compass_needle);
        markerViewOptions.icon(arrowIcon);
        markerViewOptions.position(new LatLng(position)).rotation((float) headDirection);
        marker = mapboxMap.addMarker(markerViewOptions);

    ////For updating////

        marker.setPosition(new LatLng(aircraftLocation));
        marker.setRotation((float) headDirection);
        mapboxMap.updateMarker(marker);

在最新的 Mapbox 更新中,MarkerView 和 MarkerViewOptions 已弃用。我们正在尝试使用 Marker 和 MarkerOptions 实现相同的功能。但我们无法旋转标记。

我们还尝试使用 SymbolLayer。此处提供旋转功能,但我们无法为标记设置 LatLng 位置。

如何使用最新的SDK来实现这一点?


这可以通过最新的 SDK 6.7.0 中的符号层来实现。

要添加标记:

       Bitmap compassNeedleSymbolLayerIcon = BitmapFactory.decodeResource(
                getResources(), R.drawable.compass_needle);
        mapboxMap.addImage(AIRCRAFT_MARKER_ICON_ID, compassNeedleSymbolLayerIcon);

       GeoJsonSource geoJsonSource = new GeoJsonSource(GEOJSON_SOURCE_ID, Feature.fromGeometry(
                Point.fromLngLat(longitude, latitude)));
        mapboxMap.addSource(geoJsonSource);

        SymbolLayer Layer = new SymbolLayer(AIRCRAFT_LAYER_ID, GEOJSON_SOURCE_ID)
                .withProperties(
                        PropertyFactory.iconImage(AIRCRAFT_MARKER_ICON_ID),
                        PropertyFactory.iconRotate((float) headDirection),
                        PropertyFactory.iconIgnorePlacement(true),
                        PropertyFactory.iconAllowOverlap(true)
                );
        mapboxMap.addLayer(layer);

要旋转或更改标记的位置:

GeoJsonSource source = mapboxMap.getSourceAs(GEOJSON_SOURCE_ID);
            if (source != null) {
                source.setGeoJson(Feature.
                        fromGeometry(Point.fromLngLat(longitude, latitude)));
                layer.setProperties(
                        PropertyFactory.iconRotate((float) headDirection)
                );
            }

当您在中添加标记时,上面的代码有时可能不起作用onMapReady()打回来。因为onMapReady()在加载所有样式之前调用。因此添加标记addOnDidFinishLoadingStyleListener()打回来。

mapView.addOnDidFinishLoadingStyleListener(new MapView.OnDidFinishLoadingStyleListener() {
        @Override
        public void onDidFinishLoadingStyle() {
            //add marker here
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在最新的 MapBox SDK 6.7 中旋转和更改标记的位置 的相关文章

随机推荐

  • JNA:找不到指定的程序

    我试图了解 JNA 的工作原理 因此我决定使用 spotify API libspotify 0 0 7 我设法正确加载我的 dll 但看起来我的代码没有找到 API 中定义的任何方法 这是我的代码 我的主要文件 public class
  • 组菜单项可以工作,但不显示复选标记

    我有一个带有溢出菜单的工作应用程序 菜单中的所有代码都有效 但在我单击可单击的分组菜单项后 没有显示复选标记 我是否在做一些根本性错误的事情 我认为 Android 系统会自动显示复选标记 并且系统会为我执行此操作 Android知道它是在
  • 如何指示两种 Coq 电感类型尺寸的减小

    我正在尝试定义game组合游戏的归纳型 我想要一个比较方法来判断两个游戏是否相同lessOrEq greatOrEq lessOrConf or greatOrConf 然后我可以检查两个游戏是否相等 如果它们都是 lessOrEq and
  • 为什么 SwiftUI Image 添加额外的填充来封闭 VStack?

    我正在努力解决一个非常简单的问题 如果我将一个文本放入 VStack 则顶部没有填充 如果我现在放置一个图像 我就会有一个填充 请看下面的截图 对应的代码是 struct NewView View var body some View VS
  • 不进行舍入的十进制格式.net

    昨天我问了这个一般性问题关于小数及其内部精度 这是一个关于我试图解决的场景的具体问题 我在 Sql Server 中有一个列 输入为十进制 18 6 当我获取这些值时 创建的 net 小数与数据库中的精度匹配 它们看起来像这样 1 1000
  • VB.Net 替换不起作用?

    不确定我是否做错了什么 基本上我的代码从 111111111 开始 并通过每次线程能够时将 1 添加到原始数字来进行计数 我希望该方法跳过序列中的 0 而不是在 111111119 之后转到 111111120 我希望它直接转到 11111
  • 如何就地对文件进行排序?

    当我们使用sort file命令 该文件以排序的方式显示其内容 如果我不想在标准输出上获得任何输出 而是想在输入文件中获得任何输出 该怎么办 您可以使用 o output FILEsort 选项指示相同的输入和输出文件 sort o fil
  • 将对象数据字段复制到子类实例中

    我有两个类 TNode 和 TMaster 我从 TNode 继承了 TMaster 目标是创建一个 TMaster 实例 其中包含先前创建的 TNode 实例的所有数据 是否有任何 内置 方法可以实现此目的 或者应该手动完成 type T
  • 计算向量中相同字符串的更简单方法?

    我正在尝试获取向量中所有相同字符串的数量的输出 作为更大程序的一部分 经过大量研究后 我设法将一些有用的东西组合在一起 但看起来很混乱 我想知道是否有更好的方法来做到这一点 include
  • 在多行数据中提取记事本++中2个特定单词之间的字符串/数据

    All 我一直在尝试使用正则表达式搜索和替换在 Notepad 中提取 2 个特定单词之间的文本 但没有运气 它给了我找到的最后一个匹配项 我尝试搜索 Stack Overflow 并回答了几个问题 但没有运气 我的数据是 Open opt
  • FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1

    我正在 Android 上制作一个聊天应用程序 它使用 google firebase 来存储用户互相写入的消息 为了向用户显示这些消息 我从数据库中读取它们 并使用 ListAdapter 将它们组织到自定义 ListView 中 在我将
  • 如何在Jcreator中调试? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我使用的是 JCreator 版本 5 0 0 10 而且我不知道如何调试程序 能否请您
  • 根据文本内容查找html元素

    我有一个像这样的html代码 div span TV span div 我想找到这个span通过具有文本 TV 的 documentObject 例如getElementById等等 类似的东西getElementByText 我知道可以通
  • 在 C# 中指定范围

    我有 6 个范围 1000000 5000000 50000001 10000000 10000001 25000000 25000001 50000000 50000001 75000000 75000001 100000000 现在我该
  • h5py 将虚拟数据集读取到 NumPy 数组时出错

    我正在尝试从使用 h5py 创建的虚拟 HDF 数据集加载数据 但在正确加载数据时遇到一些问题 这是我的问题的一个例子 import h5py import tools as ut virtual h5py File ut params p
  • C# 泛型方法和动态类型问题[重复]

    这个问题在这里已经有答案了 我有一个通用方法声明如下 public void Duplicate
  • SurfaceView 和 ImageView 的区别

    我想知道SurfaceView和ImageView有什么区别以及它们的使用场景 两者似乎都是一样的 如果有我可能错过的正确链接 请指导我 表面视图的一些优点和差异 更好的渲染机制 线程可以在不使用处理程序的情况下更新表面的内容 这有助于提高
  • Angular 中的子父母沟通最佳实践

    我正在努力提高 Angular 的水平 并且想了解儿童与家长之间沟通的最佳实践 我当前想要使用的应用程序是 Angular 6 我知道我可以使用 ViewChild Output 或创建服务在子父组件之间进行通信 还有其他方式进行沟通吗 如
  • 无法让OkHttp的response.body.toString()返回字符串

    我正在尝试使用 OkHttp 获取一些 json 数据 但当我尝试记录时无法弄清楚为什么response body toString 我得到的是Results com squareup okhttp Call RealResponseBod
  • 在最新的 MapBox SDK 6.7 中旋转和更改标记的位置

    Mapbox Android SDK 6 7 0 我们正在开发的应用程序的要求是 我们必须在不同的 LatLng 位置添加多个标记 并使用一些方位旋转它们 在旧的mapbox版本 4 2 1 中 我们可以毫无问题地做到这一点 Working