如何在OpenStreetMap中添加气球?

时间:2012-11-30 07:34:26

标签: java android openstreetmap osmdroid

如何将Google地图上的气球(例如显示为here的气球)添加到OpenStreetMap中?这是我的OpenStreetMap代码:

import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.ResourceProxy;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;

public class MainActivity extends Activity {

MyItemizedOverlay myItemizedOverlay = null;
  private MapController myMapController;

 @Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);
    myMapController = mapView.getController();
    myMapController.setZoom(16);


    Drawable marker=getResources().getDrawable(android.R.drawable.star_big_on);
    int markerWidth = marker.getIntrinsicWidth();
    int markerHeight = marker.getIntrinsicHeight();
    marker.setBounds(0, markerHeight, markerWidth, 0);

    ResourceProxy resourceProxy = new   
   DefaultResourceProxyImpl(getApplicationContext());

    myItemizedOverlay = new MyItemizedOverlay(marker, resourceProxy);
    mapView.getOverlays().add(myItemizedOverlay);

    GeoPoint myPoint1 = new GeoPoint(24.893379000000000000, 67.028060900000010000);
    myItemizedOverlay.addItem(myPoint1, "myPoint1", "myPoint1");
    GeoPoint myPoint2 = new GeoPoint(24.824796300000000000, 67.031565699999990000);
    myItemizedOverlay.addItem(myPoint2, "myPoint2", "myPoint2");


  } 

}


import java.util.ArrayList;

import org.osmdroid.ResourceProxy;
import org.osmdroid.api.IMapView;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.ItemizedOverlay;
import org.osmdroid.views.overlay.OverlayItem;

import android.graphics.Point;
import android.graphics.drawable.Drawable;

public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

    private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();

    public MyItemizedOverlay(Drawable pDefaultMarker,
       ResourceProxy pResourceProxy) {
     super(pDefaultMarker, pResourceProxy);
       // TODO Auto-generated constructor stub
     }

     public void addItem(GeoPoint p, String title, String snippet){
        OverlayItem newItem = new OverlayItem(title, snippet, p);
        overlayItemList.add(newItem);
        populate(); 
     }

     @Override
     public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {
       // TODO Auto-generated method stub
       return false;
     }

     @Override
     protected OverlayItem createItem(int arg0) {
       // TODO Auto-generated method stub
       return overlayItemList.get(arg0);
     }

     @Override
     public int size() {
       // TODO Auto-generated method stub
       return overlayItemList.size();
     }

}

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,现在我找到了办法:

  1. 在此处下载 osmbonuspack https://code.google.com/p/osmbonuspack/

  2. 请遵循以下代码:

    ArrayList<ExtendedOverlayItem> overlayItemArray = new ArrayList<ExtendedOverlayItem>();
    
    ExtendedOverlayItem item = new ExtendedOverlayItem("Title, "Description, new GeoPoint(Double latitude, Double longitude), this);
    
    //creates a layer with ballons
    
    ItemizedOverlayWithBubble<ExtendedOverlayItem> poiMarkers = new ItemizedOverlayWithBubble<ExtendedOverlayItem>(this, overlayItemArray, mapView, new CustomMapInfoWindow(mapView));
    
    // add the layer
    mapView.getOverlays().add(poiMarkers);
    
  3. 创建一个名为 CustomMapInfoWindow 的类:

    import org.osmdroid.bonuspack.overlays.DefaultInfoWindow;
    import org.osmdroid.bonuspack.overlays.ExtendedOverlayItem;
    import org.osmdroid.views.MapView;
    
    public class CustomMapInfoWindow extends DefaultInfoWindow {
    
        public CustomMapInfoWindow(MapView mapView) {
            super(R.layout.bonuspack_bubble, mapView);
    
        }
    
        @Override
        public void onOpen(ExtendedOverlayItem item) {
            super.onOpen(item);
        }
    }
    
  4. 转到OSMBONUSPACKDEMO REPOSITORY并将 bonuspack_bubble.xml drawables 导入 drawable-mdpi 文件夹。

答案 1 :(得分:1)

你应该看看osmbonuspack库,它是osmdroid的附加组件。它包含一个显示弹出气球的叠加层:

https://code.google.com/p/osmbonuspack/