android map开发3 添加标记

来源:互联网 发布:js object[] 编辑:程序博客网 时间:2024/05/17 23:46
在地图上添加标记,主要类有
com.google.android.maps.Overlay 
com.google.android.maps.ItemizedOverlay<Item>
 
地图可以分为多个图层,可以继承Overlay或者其子类,绘制自己想要的结果。
 
1.    配置布局文件

  <com.google.android.maps.MapView

       android:id="@+id/mapView"

       android:layout_width="fill_parent"

        android:layout_height="fill_parent"

       android:enabled="true"

        android:clickable="true" android:apiKey="xxxxxxxxxxxxxxxxx”

    />
apiKey的申请参考上一篇
 
2.    重写Overlay或者其子类
1.         extends Overlay

public class MarkMap1extends Overlay

{

  private GeoPoint geoPoint =null;

  private Bitmap bitMap =null;

  public MarkMap1()

  {

    super();

  }

 

public MarkMap1(GeoPoint geoPoint,Bitmap bitMap)

  {

    super();

    this.geoPoint = geoPoint;

    this.bitMap = bitMap;

  }

   

  @Override

public void draw(Canvas canvas, MapView mapView,boolean shadow)

  {

    super.draw(canvas, mapView, shadow);

    if (!shadow)

    {

      Projection promapView.getProjection();

      if (geoPoint !=null && bitMap !=null)

      {

         Point poi = pro.toPixels(geoPoint,null);

         canvas.drawBitmap(bitMap, poi.x, poi.y,null);

      }

    }

  }

  @Override

  public boolean onTap(GeoPoint p, MapView mapView)

  {

    Toast.makeText(mapView.getContext(), "测试点击", Toast.LENGTH_SHORT).show();

    return super.onTap(p, mapView);

     }
 
extends ItemizedOverlay<OverlayItem>
 

public class MarkMapextends ItemizedOverlay<OverlayItem>

{

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

  private Context mContext =null;

 

  public MarkMap(Drawable defaultMarker)

  {

    super(boundCenterBottom(defaultMarker));

  }

 

  public MarkMap(Drawable defaultMarker, Context context)

  {

    super(boundCenterBottom(defaultMarker));

    this.mContext = context;

  }

 

  @Override

  protected OverlayItem createItem(int i)

  {

    return mOverlays.get(i);

  }

 

  @Override

  public int size()

  {

    return mOverlays.size();

  }

 

public void addOverlay(OverlayItem overlay)

  {

    mOverlays.add(overlay);

    populate();

  }

 

  protected boolean onTap(int index)

  {

    OverlayItem item = mOverlays.get(index);

    AlertDialog.Builderdialog = new AlertDialog.Builder(mContext);

    dialog.setTitle(item.getTitle());

    dialog.setMessage(item.getSnippet());

    dialog.show();

   

    return true;

  }

   

}

3. Activity   extends MapActivity

/*

 * 在地图上添加标记

 *

 * */

public class Map2Activityextends MapActivity

  private MapView mapView =null

  @Override

  public void onCreate(Bundle savedInstanceState)

  {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

 

    Bitmap bitmap = BitmapFactory

         .decodeResource(getResources(), R.drawable.police);

   

    mapView = (MapView) findViewById(R.id.mapView);

    /*

    //extends Overlay

    mapView.setBuiltInZoomControls(true); 

    GeoPoint point = new GeoPoint((int) (39.95 * 1000000),

         (int) (116.37 * 1000000)); 

    MarkMap1 mm = new MarkMap1(point, bitmap);

    mapView.getOverlays().add(mm);

    */

   

    List<Overlay> mapOverlays = mapView.getOverlays();

    Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);

    MarkMap itemizedoverlay = new MarkMap(drawable, this);

   

    GeoPoint point1 = new GeoPoint((int) (39.95 * 1000000),

         (int) (116.37 * 1000000));

    GeoPoint point2 = new GeoPoint((int) (39.95 * 1000000),

         (int) (118.37 * 1000000));

    GeoPoint point3 = new GeoPoint((int) (39.95 * 1000000),

         (int) (120.37 * 1000000));

   

    OverlayItem overlayitem1 =new OverlayItem(point1,"地址","这是北京偶");

    OverlayItem overlayitem2 =new OverlayItem(point2,"地址","这是北京偶");

    OverlayItem overlayitem3 =new OverlayItem(point3,"地址","这是北京偶");

   

    itemizedoverlay.addOverlay(overlayitem1);

    itemizedoverlay.addOverlay(overlayitem2);

    itemizedoverlay.addOverlay(overlayitem3);

   

    mapOverlays.add(itemizedoverlay);

   

    mapView.getController().setZoom(8); 

          //将地图移动到 Overlay层标记的几个对象的第一个标记点(不是中心点) 

      mapView.getController().setCenter(itemizedoverlay.getCenter()); 

     

  }

 

  @Override

  protected boolean isRouteDisplayed()

  {

    return false;

  }

 

}
 
4.   AndroidManifest.xml

 添加对应的权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permissionandroid:name="android.permission.INTERNET"/>

 
将uses-library 加入到application
<uses-library android:name="com.google.android.maps" />
 
 
运行成功后,会在地图上看到三个标记,点击会触发对应的事件。
在三星I9020上测试通过。
 
参考网址:http://code.google.com/intl/zh-CN/android/add-ons/google-apis/index.html 
 
http://code.autonavi.com/android/code 高德地图的API,和官网的貌似一样,只不过变成中文了。
 
http://developer.android.com/resources/tutorials/views/hello-mapview.html  实例中的DEMO原型 ,很多文张直接复制这篇的。
 
http://developer.android.com/resources/index.html  简单实用的demo 
 

 

 

 

原创粉丝点击