0

如何将 Google 地图上的气球(例如此处显示的气球)添加到 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();
     }

}
4

2 回答 2

2

我有同样的问题,现在我找到了一种方法:

  1. 在此处下载osmbonuspackhttps ://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.xmldrawables放入drawable-mdpi文件夹。

于 2013-08-02T14:59:19.643 回答
1

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

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

于 2013-07-25T13:26:11.950 回答