MapMarker.setCoordinate()停止更新位置

时间:2017-06-16 12:05:40

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

对于自定义Positionindicator,我使用Here SDK给出的MapMarker。该位置由Beacons获得。在某些时候,我仍然会通过信标以GeoCoordinates的形式接收新的位置数据,但MapMarker的定位会阻止它停留在某个位置。过了一会儿,让我们说100米,它会更新位置然后再次卡住。我在实施中遗漏了什么吗?

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

地理坐标每秒或更短时间更新一次。

我可以看到新的位置......但是MapMarker仍处于某个旧位置。

传递给地图标记的geoCoordinate如下所示:new GeoCoordinate(52.xxxxxx , 13.xxxxxx)

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

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

1 个答案:

答案 0 :(得分:3)

要为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接收更新的室内位置或此处PositioningManager,则无关紧要。

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