【问题标题】:MapMarker.setCoordinate() stops updating the PositionMapMarker.setCoordinate() 停止更新位置
【发布时间】:2023-03-10 13:06:01
【问题描述】:

对于自定义 Positionindicator,我使用 Here SDK 提供的 MapMarker。位置由信标获得。在某些时候,我仍然会收到信标以 GeoCoordinates 形式出现的新位置数据,但 MapMarker 的定位停止并且它停留在某个位置。过了一会儿,假设 100m,它更新了位置,但又被卡住了。我在实施过程中遗漏了什么吗?

  if (mPositionIndicator.getCoordinate() != geoCoordinate) 
       mPositionIndicator.setCoordinate(geoCoordinate);

地理坐标每秒更新一次或更少。

我可以看到新位置...但 MapMarker 仍停留在某个旧位置。

我传递给地图标记的geoCoordinate 看起来像这样:new GeoCoordinate(52.xxxxxx , 13.xxxxxx)

我尝试使用 removeMapObject 和 addMapObject 更新位置,但在传递新位置时它仍然不更新。

更新: 更多信息。我使用其他一些框架从信标中获取位置数据并将此数据设置为地图标记。

【问题讨论】:

  • 这个问题仍然存在。如何使用地图标记实现位置指示器之类的行为?

标签: android geolocation here-api indoor-positioning-system


【解决方案1】:

要为MapMarker 设置新位置,您不必再次调用addMapObject()。设置新位置就足够了。例如,以下代码将创建一个MapMarker,它每 100 毫秒不断向北移动:

new Thread() {
    public void run() {
        try {
            while(true) {
                if (m_marker == null) {
                    m_latitude = 52.5;
                    Image image = new Image();
                    image.setBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.image));
                    m_marker = new MapMarker(new GeoCoordinate(m_latitude, 13.4), image);
                    m_hereMap.addMapObject(m_marker);
                }
                // move marker north
                m_marker.setCoordinate(new GeoCoordinate(m_latitude += 0.00001, 13.4));
                sleep(100);
            }
        } catch (InterruptedException e) {}
    }
}.start();

因此,我建议隔离问题。使用 Beacons 接收更新的室内位置或 HERE 的 PositioningManager 都无关紧要。

此外,在您的实现中,比较 GeoCoordinate 实例而不是比较纬度或经度是否不同似乎有点可疑。最好使用geoCoordinate1.equals(geoCoordinate2)

【讨论】:

  • 实际上不要调用'map.addMapObject(marker)' 我所做的只是用marker.setCoordinate添加新的GeoLocation。我将代码更改为使用 .equals。没有效果。标记仍然停留在原来的位置。
猜你喜欢
  • 2017-05-30
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多