【问题标题】:How to change the overlay position dynamically based on the GPS data如何根据 GPS 数据动态更改叠加位置
【发布时间】:2011-06-06 12:52:13
【问题描述】:

我有一个应用程序,我试图在其中模拟实时跟踪,所以我从一个存储数据的类中读取一些 GPS 数据,并尝试将这些点放在地图上,我还添加了一个标记到当前位置。

我面临的问题是,一旦我将叠加层添加到一个位置,它就会停留在那里......当我阅读下一个位置并将其放在地图上并为此添加一个标记时...... ..我的地图上有两个叠加层...

我想要做的是将叠加层放在每个当前位置......就像它会在地图上行走......并且在我当时代表的位置上只有一个叠加层。 ..al 之前的职位覆盖都消失了,但我真的不知道如何实现。

希望你能帮助我!

这是我的代码:

public void onCreate(Bundle savedInstanceState)
{
   marker = getResources().getDrawable(R.drawable.comet);
   marker.setBounds(0,0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
}

----------------我正在使用异步线程来读取 GPS 数据-------------------- -----

protected Void doInBackground(Void... voids) 
{
   while (true) {
     longitude = ServerManager.getInstance().getLastLongitude();
     latitude = ServerManager.getInstance().getLastLatitude();
     p = new GeoPoint(latitude, longitude);
     publishProgress(p);
    }
  }

  protected void onProgressUpdate(GeoPoint... progress1) 
  {
    mapView.getOverlays().add(new SitesOverlay(marker,progress1[0]));
  }
}

最后这是我添加叠加层的类:

private class SitesOverlay extends ItemizedOverlay<OverlayItem> 
{
    private List<OverlayItem> items = new ArrayList<OverlayItem>();
    private Drawable marker = null;
    GeoPoint gp1;

    public SitesOverlay(Drawable marker,GeoPoint gp1)
    {
       super(marker);
       this.marker = marker;
       this.gp1=gp1;
       items.add(new OverlayItem(gp1,"Your location", "You are here!"));
       populate();
    }

    @Override
    protected OverlayItem createItem(int i) 
    {
       return (items.get(i));
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    {
        super.draw(canvas, mapView, shadow);
        boundCenterBottom(marker);
    }

    @Override
    public int size() 
    {
      return (items.size());
    }
}

【问题讨论】:

    标签: android map overlay


    【解决方案1】:

    如果你使用:

    mapView.getOverlays().add(new SitesOverlay(marker,progress1[0]));
    

    那么你也可以使用:

    mapView.getOverlays().remove(i);
    

    mapView.getOverlays() 返回应绘制的叠加层数组。您可以随时修改此数组。更多在这里: http://code.google.com/intl/pl-PL/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html#getOverlays()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多