对于自定义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。
答案 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)
。