Google map(2)

来源:互联网 发布:linux怎样关闭防火墙 编辑:程序博客网 时间:2024/06/04 18:31

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方法即可。如:

@Overridepublic 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();}




原创粉丝点击