首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Osmdroid标记不更新

Osmdroid标记不更新
EN

Stack Overflow用户
提问于 2016-10-19 12:54:16
回答 2查看 2.1K关注 0票数 1

我必须使用osmdriod映射api来实现导航。该活动使用以下接收器接收来自位置服务的广播:

代码语言:javascript
复制
public class ReceiveMessages extends BroadcastReceiver
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        String lat = intent.getStringExtra("Latitude");
        String lon = intent.getStringExtra("Longitude");
        System.out.println("on recieve called "+lat+lon);
        updateUi(Double.parseDouble(lat),Double.parseDouble(lon));
    }
}

以下是updateUi方法:

代码语言:javascript
复制
public void updateUi(Double lat,Double lon) { 
    gPt1 = new GeoPoint(lat, lon);
    Marker endMarker = new Marker(mMapView);
    endMarker.setPosition(gPt1);
    endMarker.setTitle("Current Position"+lat+" "+lon);
    mMapView.getOverlays().add(endMarker);

    Polyline pl = new Polyline();
    pl.setWidth(5f);
    pl.setColor(Color.RED);
    List<GeoPoint> pts = new ArrayList<>();
    pts.add(gPt0);
    pts.add(gPt1);
    pl.setPoints(pts);
    pl.setGeodesic(true);
    mMapView.getOverlayManager().add(pl);
    mMapView.invalidate();
}

现在发生的情况是,当当前位置发生变化(如这里这里 )时,当广播接收器被调用时,当前位置标记将被添加到另一个位置上。

我只想要一个单一的当前位置标记和一个单一的多线之间的两个标记,这将得到更新。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-22 18:36:12

如果您在每次更新中添加了一个标记和Polyline,API会按照请求执行:添加它们。

2解决方案,视您的情况而定:

1)如果您总是有一个标记和一个折线来显示=>,那么在开始时只将它们添加到MapView中一次。然后,在更新时,只需更新它们(并使mapview失效)。但不要一次又一次地加起来。

2)如果覆盖列表在每次更新时都可能发生变化(n个标记,m折线):按照间谍的建议,删除所有覆盖,并重新创建它们。使用FolderOverlay可以非常有助于安全地管理此操作(如果您有其他希望一直保持的覆盖)。

票数 1
EN

Stack Overflow用户

发布于 2016-10-20 22:30:12

mMapView.getOverlayManager().clear()怎么样?

实际上,对osmdroid没有更新方法。您需要删除您的旧标记,并添加一个新的地图视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40131987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档