Google map(2)

1.显示内置的缩放控制器:

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

     编写代码控制缩放:从MapView对象获取MapController实例,然后调用MapController的zoomOut()和zoomIn()方法。

MapController mc = mapView.getController();

mc.zoomIn();

    缩放到指定等级:

setZoom(int zoomLevel)

2.使用不同的视图:

调用MapView的setSatellite(), setStreetView(),setTraffic()3个方法来设置不同的视图。 


3.定位到指定点:MapController

调用MapController的animateTo(GeoPoint point)方法即可。

GeoPoint是一个含有经度和纬度的类,可以调用它的构造方法GeoPoint(int latitudeE6, int longitudeE6)来指定经纬度。注意是有个10的6次方。

4.在指定点上画上标记点:

1)定义一个继承自Overlay的子类并重写其中的draw方法。如:

    private class  MapOverlay extends com.google.android.maps.Overlay
    {
         @Override
         public boolean draw(Canvas canvas, MapView mapView,
         boolean shadow, long when)
        {
            super.draw(canvas, mapView, shadow);
            //将GeoPoint 转化为屏幕坐标点            
            Point screenPts = new  Point();
            mapView.getProjection().toPixels(p, screenPts);
            //画出标记
            Bitmap bmp = BitmapFactory.decodeResource(
                getResources(), R.drawable. pushpin);
            //50为图片的高度,screenPts点的坐标要比画出点的坐标高出图片的高度
            canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null);
            return true;
        }
    }
2)创建一个mapOverlay实例并将它添加到MapView对象上的Overlay列表中:

         //---Add a location marker---        
        MapOverlay mapOverlay = new  MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);

5.获得触摸点的地理坐标:

只需在MapOverlay类中重写onTouchEvent方法即可。如:

	@Override
	public boolean onTouchEvent(MotionEvent arg0, MapView arg1) {
	   // TODO Auto-generated method stub
            if (arg0.getAction() == 1) {
                GeoPoint p = mapView.getProjection().fromPixels(
                    (int ) arg0.getX(),
                    (int ) arg0.getY());
                    Toast.makeText (getBaseContext(),
                        "Location: "+
                        p.getLatitudeE6() / 1E6 + p.getLongitudeE6() / 1E6 + "",Toast.LENGTH_SHORT).show();
            }
            return false;		
        }	


6.Geocoding:

通过Geocoding类可以从一个GeoPoint点获取它的地址:

只需要创建Geocoder类并调用它的getFromLocation()方法。如在刚才的onTouchEvent方法中添加下列代码:

Geocoder geoCoder = new  Geocoder(getBaseContext(), Locale.getDefault());
      try  {
            List<Address> addresses = geoCoder.getFromLocation(
                                      p.getLatitudeE6()  / 1E6,
                                      p.getLongitudeE6() / 1E6, 1);
            String add =  “”;
            if (addresses.size() > 0) 
            {
                 for  (int  i=0; i<addresses.get(0).getMaxAddressLineIndex();i++)
                     add += addresses.get(0).getAddressLine(i) + “\n”;
            }
            Toast. makeText (getBaseContext(), add, Toast. LENGTH_SHORT).show();
            }
            catch (IOException e) {
                    e.printStackTrace();
                }

也可以反过来,根据地址来定位到点:

Geocoder geoCoder =  new  Geocoder(this, Locale.getDefault());
try  {
   List<Address> addresses = geoCoder.getFromLocationName(
       “empire state building” , 5);
   
   if (addresses.size() > 0) {
       p =  new  GeoPoint(
               (int ) (addresses.get(0).getLatitude() * 1E6),
               (int ) (addresses.get(0).getLongitude() * 1E6));
       mc.animateTo(p);
       mc.setZoom(20);
   }
} catch (IOException e) {
   e.printStackTrace();
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值