【问题标题】:Mapbox custom user location annotation image and positionMapbox 自定义用户位置标注图片和位置
【发布时间】:2018-05-26 02:56:31
【问题描述】:

我希望能够在 iOS 的 Mapbox 地图上显示用户位置的自定义图像,并且能够从内部源设置当前用户位置,而不是使用内部源GPS 来源。

内置的用户定位工具似乎只能从 Mapbox 内部定位引擎获取位置。我在地图上添加了一个自定义注释,当我获得新的位置修复时,我可以更新它的位置,但是动作很不稳定(我可以用相机动画平移地图,但不能用注释。)

iOS Mapbox SDK 中是否有任何方法可以动画更改注释的位置?

【问题讨论】:

  • 您能再解释一下您的需求吗?如果您想为用户位置提供不同于 GPS 提供的位置数据,那么大概您不想实际显示手机实际位置的真实(纬度、经度)?如果是这种情况,为什么不隐藏默认的用户位置标记并为自己的位置数据使用自己的注释?
  • 位置来自外部 GPS 接收器。所以它是设备的位置,只是不是从内部 GPS 获得的(并非所有 iDevice 在任何情况下都具有内部 GPS。)如上所述,我正在添加自己的注释,但似乎没有内置的平滑动画方式它的位置发生变化,而MGLUserLocationAnnotation 动画变化。
  • Android 版 Mapbox SDK 有一个用于当前位置的插件,它有一个方法 forceLocationUpdate() 允许注入外部派生位置。效果很好,我正在尝试在 iOS 上复制相同的功能。
  • 看起来有一个PR in the works 可能对您的用例有所帮助。

标签: ios mapbox


【解决方案1】:

所以这就是我想出的。在MGLMapViewDelegate 中,我使用didFinishRenderingFrame() 回调来更新位置,在两个最近的位置之间进行插值。 posAnnotation 是与 flightMarker 关联的 MGLPointAnnotation,它是 MGLAnnotationView 扩展以添加 UIImageView 并保存位置。

        override fun didFinishRenderingFrame(mapView: MGLMapView, fullyRendered: Boolean) {
            val frac = min((CFDate.getCurrentAbsoluteTime() - lastUpdateTimestamp) / lastUpdateInterval, 1.0)
            if(flightMarker.location.valid)
                posAnnotation.coordinate = flightMarker.interpolatedLocation(frac)
        }

        override fun viewForAnnotation(mapView: MGLMapView, annotation: MGLAnnotation): MGLAnnotationView? {
            return if (annotation == posAnnotation) flightMarker else null
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2019-11-07
    相关资源
    最近更新 更多