当前位置: 首页 > 知识库问答 >
问题:

使用ItemisedOverlay Android的多个标记

东门清夷
2023-03-14

在我的应用程序中,我的web服务有多个纬度和经度。此时,使用下面的代码,我只能在goole地图上显示一个坐标。

public class CustomMap extends MapActivity {

    MapView mapView;
    List<Overlay> mapOverlays;
    Drawable drawable;
    Drawable drawable2;
    CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay2;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gmap);
        //setContentView(LayoutInflater.from(getParent()).inflate(R.layout.main_ou, null));

        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapOverlays = mapView.getOverlays();

        // second overlay
        drawable2 = getResources().getDrawable(R.drawable.red);
        itemizedOverlay2 = new CustomItemizedOverlay<CustomOverlayItem>(drawable2, mapView);
        GeoPoint point3 =  new GeoPoint((int)(-10.224609*1E6),(int)(17.506044*1E6));
        CustomOverlayItem overlayItem3 = new CustomOverlayItem(point3, "Title", 
        "Cliquez here", null);

        itemizedOverlay2.addOverlay(overlayItem3);
        //itemizedOverlay2.onTap(0);

        mapOverlays.add(itemizedOverlay2);

        final MapController mc = mapView.getController();
        mc.animateTo(point3);
        mc.setZoom(16);

    }


    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }




}

现在,我想使用数组在地图上动态设置纬度和经度。我正在使用ArrayList val;获取和设置数据。有人能给我一个如何使这个类动态的提示吗。

新建更新下面的代码只显示一个标记,但我希望显示所有标记

public class Map extends MapActivity {

     private MapController mapControll;
     private GeoPoint geoPoint=null;
     private MapView mapview;
     private MyItemizedOverlay userPicOverlay;
     private MyItemizedOverlay nearPicOverlay;
     private Drawable userPic,atmPic;
     private CustomOverlayItem nearatms[] = new CustomOverlayItem[50];
     public static Context context;

     double latitude,longitude;



    ArrayList<Article> mArticles;
    CustomOverlayItem overlayItem3 ;
    public ArrayList<Article> articles;
    public static ArrayList<Article> article;

    EditText search;
    DBHelper helper;
    GeoPoint point;

    MapView mapView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aproximite);
        context = getApplicationContext();

        mapView = (MapView) findViewById(R.id.mapview);
        mapView = (MapView) findViewById(R.id.mapview);
        search = (EditText)findViewById(R.id.search_box);

        helper = DBHelper.getInstance(this);

        geoPoint = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6));          
        mapview = (MapView)findViewById(R.id.mapview);
        mapControll= mapview.getController();
        mapview.setBuiltInZoomControls(true);
        mapview.setStreetView(true);
        mapControll.setZoom(16);
        mapControll.animateTo(geoPoint);

        userPic = this.getResources().getDrawable(R.drawable.boutton_log);
        userPicOverlay = new MyItemizedOverlay(userPic);
        OverlayItem overlayItem = new OverlayItem(geoPoint, "I'm Here!!!", null);
        userPicOverlay.addOverlay(overlayItem);
        mapview.getOverlays().add(userPicOverlay);


        atmPic = this.getResources().getDrawable(R.drawable.boutton_log);
        nearPicOverlay = new MyItemizedOverlay(atmPic);


        new GetLocationTask().execute();

    }




private class GetLocationTask extends AsyncTask<Void, Void, Void> {

        @Override
        public Void doInBackground(Void... params) {
            mArticles = helper.getArticlesList();

            return null;
        }

        @Override
        public void onPreExecute() {}

        @Override
        public void onPostExecute(Void result) {            

          try {

                for (int i = 0; i < mArticles.size(); i++) {


                    point =  new GeoPoint((int)(Double.parseDouble(mArticles.get(i).getLatitude())*1E6),(int)(Double.parseDouble(mArticles.get(i).getLongitude())*1E6));
                    nearatms[i] = new CustomOverlayItem(point ,"title", 
                    "click here", null);

                    nearPicOverlay.addOverlay(nearatms[i]);
                }
                mapview.getOverlays().add(nearPicOverlay);
                //Added symbols will be displayed when map is redrawn so force redraw now
                mapview.postInvalidate();
            } catch (Exception e) {
                e.printStackTrace();
            }


        }
     }





@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}

}

MyItemizedOverlay.class

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    private ArrayList<OverlayItem> myOverlays ;

    public MyItemizedOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
        myOverlays = new ArrayList<OverlayItem>();
        populate();
    }

    public void addOverlay(OverlayItem overlay){
        myOverlays.add(overlay);
        populate();
    }

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

    // Removes overlay item i
    public void removeItem(int i){
        myOverlays.remove(i);
        populate();
    }

    // Returns present number of items in list
    @Override
    public int size() {
        return myOverlays.size();
    }


    public void addOverlayItem(OverlayItem overlayItem) {
        myOverlays.add(overlayItem);
        populate();
    }


    public void addOverlayItem(int lat, int lon, String title) {
        try {
            GeoPoint point = new GeoPoint(lat, lon);
            OverlayItem overlayItem = new OverlayItem(point, title, null);
            addOverlayItem(overlayItem);    
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }

    @Override
    protected boolean onTap(int index) {
        // TODO Auto-generated method stub
        String title = myOverlays.get(index).getTitle();
        System.out.println(index);
        return super.onTap(index);
    }
}

共有1个答案

甄阳朔
2023-03-14

使用这种方式。。

对于google map v1--

对于Google MAP v2,请检查以下代码

调用此方法

for(int i = 0 ; i < arraylist.size();i++){
    addMarker(mapview,arraylistLat.get(i),arraylistLong.get(i),title.get(i),arraysnippet.get(i));
}
private void addMarker(GoogleMap map, double lat, double lon,
            String string, String string2) {
        map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
                .title(string).snippet(string2));
    }
 类似资料:
  • 我想添加多个点击激活的标记和信息。我有麻烦,以显示相关的信息标记,点击后,相同的信息标记为所有标记打开。 信息来自for循环这是代码

  • 我可以使用命令lp-o DymoPrintQuality=Text-o PageSize=w54h144-o横向-n 1-d Dymo400Turbo/tmp/test打印单个标签。txt。 当我使用命令lp-n2-o DymoPrintQuality=Text-o PageSize=w54h144-o横向-d Dymo400Turbo/tmp/test时。它打印一个标签,而不是2个。 我已经测试

  • 我正在尝试将标签添加到我的lm图中的每个数据点。我想通过索引标记每个数据点。现在我的代码如下: 这会将所有标签绘制到最后一个绘图上。 带标签的lmplot 我尝试使用整个图形而不是当前轴来标记点(ddf.target、ddf.source、ddf.chip、plt.gcf()),但它抛出了一个错误。

  • 我调用API,然后将JSON数据添加到arraylist中,然后调用arraylist数据,并将纬度和经度放置在地图上,放置多个标记。我相信我的问题是从ArrayList获取字符串,但我不知道如何解决它。 我正在从另一个类调用API 私有GoogleMap mMap;

  • 我有一个标签,这是使用了多次在我的网页。它工作得很好,直到我尝试按Ajax更新标签。结果:只有第一个标签得到更新。这是一个已知的问题吗?我不确定,因为我不能打开JIRA页面:https://issues.apache.org/JIRA/browse/wicket(一直在跳)。我使用的是wicket 7.3.0版本 =>只更新第一个标签。我有一个解决办法,通过添加4个不同的标签实例与相同的文本内容。