`
yunlonglove
  • 浏览: 242724 次
社区版块
存档分类
最新评论

android Google Map地图应用与实现

 
阅读更多

Google Map对于一个安卓工程师来说是必不可少学习知识,最近也在研究这个所以做了一个简单示例定位与视图的应用下面是源码与注释,而这基础则是先申请Google Map Key 然后在填写xml文件代码,上次想在真机上演示出地图效果,结果发现真机上无法显示MapView 经过查询发现还需要在</application>之前申明<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 这确实比较奇怪 平常我们在做的时候都是在之后申明的 但这次却在前面,不过,不加这申明确实在手机上无法显示!

public class Activity01 extends MapActivity 
{
 public MapController mapController;
    public MyLocationOverlay myPosition;
    public MapView myMapView;
    private static final int ZOOM_IN=Menu.FIRST; 
    private static final int ZOOM_OUT=Menu.FIRST+1;

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       //去除title    
        requestWindowFeature(Window.FEATURE_NO_TITLE);    
        //去掉Activity上面的状态栏
        getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,      
                       WindowManager.LayoutParams. FLAG_FULLSCREEN);   

       
        setContentView(R.layout.main);
        //取得LocationManager实例
        LocationManager locationManager;
        String context=Context.LOCATION_SERVICE;
        locationManager=(LocationManager)getSystemService(context);
        myMapView=(MapView)findViewById(R.id.MapView01);
        //取得MapController实例,控制地图
        mapController=myMapView.getController();
        //设置显示模式
        myMapView.setSatellite(true);
        myMapView.setStreetView(true);
         myMapView.setBuiltInZoomControls(true);  
        //设置使用MyLocationOverlay来绘图
        mapController.setZoom(17);
        myPosition=new MyLocationOverlay();
        List<Overlay> overlays=myMapView.getOverlays();
        overlays.add(myPosition);
        //设置Criteria(服务商)的信息
        Criteria criteria =new Criteria();
        //经度要求
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(false);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        //取得效果最好的criteria
        String provider=locationManager.getBestProvider(criteria, true);
        //得到坐标相关的信息
        Location location=locationManager.getLastKnownLocation(provider);
        //更新坐标
        updateWithNewLocation(location);
        //注册一个周期性的更新,3000ms更新一次
        //locationListener用来监听定位信息的改变
        locationManager.requestLocationUpdates(provider, 3000, 0,locationListener);
    }
    private void updateWithNewLocation(Location location) 
    {
        String latLongString;
        TextView myLocationText = (TextView)findViewById(R.id.TextView01);
        
        String addressString="没有找到你的位置!\n";
        
        if(location!=null)
        {
         //为绘制标志的类设置坐标
            myPosition.setLocation(location);
            //取得经度和纬度
            Double geoLat=location.getLatitude()*1E6;
            Double geoLng=location.getLongitude()*1E6;
            //将其转换为int型
            GeoPoint point=new GeoPoint(geoLat.intValue(),geoLng.intValue());
            //定位到指定坐标
            mapController.animateTo(point);
            double lat=location.getLatitude();
            double lng=location.getLongitude();
            latLongString="经度:"+lat+"\n纬度:"+lng;
            
            double latitude=location.getLatitude();
            double longitude=location.getLongitude();
            //更具地理环境来确定编码
            Geocoder gc=new Geocoder(this,Locale.getDefault());
            try
            {
             //取得地址相关的一些信息\经度、纬度
                List<Address> addresses=gc.getFromLocation(latitude, longitude,1);
                StringBuilder sb=new StringBuilder();
                if(addresses.size()>0)
                {
                    Address address=addresses.get(0);
                    for(int i=0;i<address.getMaxAddressLineIndex();i++)
                        sb.append(address.getAddressLine(i)).append("\n");
                        
                        sb.append(address.getLocality()).append("\n");
                        sb.append(address.getPostalCode()).append("\n");
                        sb.append(address.getCountryName());
                        addressString=sb.toString();
                }
            }catch(IOException e){}
        }
        else
        {
            latLongString="没有找到坐标.\n";
        }
        //显示
        myLocationText.setText("你当前的位置坐标如下:\n"+latLongString+"\n"+addressString);
    }
    private final LocationListener locationListener=new LocationListener()
    {
     //当坐标改变时触发此函数
        public void onLocationChanged(Location location)
        {
         updateWithNewLocation(location);
        }
        //Provider被disable时触发此函数,比如GPS被关闭 
        public void onProviderDisabled(String provider)
        {
         updateWithNewLocation(null);
        }
        //Provider被enable时触发此函数,比如GPS被打开
        public void onProviderEnabled(String provider){}
        //Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
        public void onStatusChanged(String provider,int status,Bundle extras){}
    };
    protected boolean isRouteDisplayed()
 {
  return false;
 }
    //为应用程序添加菜单
    public boolean onCreateOptionsMenu(Menu menu)
 {
  super.onCreateOptionsMenu(menu);
  menu.add(0, ZOOM_IN, Menu.NONE, "放大");
  menu.add(0, ZOOM_OUT, Menu.NONE, "缩小");
  return true;
 }
    public boolean onOptionsItemSelected(MenuItem item)
 {
  super.onOptionsItemSelected(item);
  switch (item.getItemId())
  {
   case (ZOOM_IN):
    //放大
    mapController.zoomIn();
    return true;
   case (ZOOM_OUT):
    //缩小
    mapController.zoomOut();
    return true;
  }
  return true;
 }

    
 class MyLocationOverlay extends Overlay
 {
  Location mLocation;
  //在更新坐标时,设置该坐标,一边画图
  public void setLocation(Location location)
  {
   mLocation = location;
  }
  @Override
  public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when)
  {
   super.draw(canvas, mapView, shadow);
   Paint paint = new Paint();
   Point myScreenCoords = new Point();
   // 将经纬度转换成实际屏幕坐标 这部分为地图最基本的使用方式 所以及其重要
   GeoPoint tmpGeoPoint = new GeoPoint((int)(mLocation.getLatitude()*1E6),(int)(mLocation.getLongitude()*1E6));
   mapView.getProjection().toPixels(tmpGeoPoint, myScreenCoords);
   paint.setStrokeWidth(1);
   paint.setARGB(255, 255, 0, 0);
   paint.setStyle(Paint.Style.STROKE);
   Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.btn_insert_location_nor_2);
   canvas.drawBitmap(bmp, myScreenCoords.x, myScreenCoords.y, paint);
   canvas.drawText("我的当前位置", myScreenCoords.x, myScreenCoords.y, paint);
   return true;
  }
 }
}


下面是结果!

分享到:
评论

相关推荐

    android google map 应用

    在Android布局文件中添加MapView组件,通过设置API密钥和初始化GoogleMap对象,可以实现在应用中展示地图。同时,可以通过调整Zoom级别来控制地图的缩放程度,使用CameraPosition和CameraUpdateFactory来改变视图...

    轨迹记录 android google map 应用

    本实例,"轨迹记录 android google map 应用",是针对Android开发初学者的一个实战项目,它展示了如何在Android设备上实现轨迹记录功能,结合Google Maps展示行走或移动的路径。这个应用对于户外活动、运动健身或者...

    android使用谷歌地图,利用高德地图加载瓦片图层

    总的来说,结合谷歌地图API和高德地图的数据资源,开发者可以创建出具有个性化特色的地图应用。通过理解并实践上述方法,你可以实现在Android应用中加载自定义的瓦片图层,提升地图功能的用户体验。

    谷歌地图应用GoogleMap

    谷歌地图应用GoogleMap是一款基于Google提供的地图服务开发的应用程序,它允许用户进行一系列与地理位置相关的操作,如搜索城市、选择定位、切换浏览模式等。在移动设备上,这样的应用为用户提供了一个直观且实用的...

    android google map 导航

    一旦得到路线信息,可以在地图上绘制路径,使用`PolylineOptions`和`GoogleMap.addPolyline()`方法。 总的来说,实现Android上的Google Map导航功能涉及以下几个关键步骤: 1. 添加Google Play Services依赖 2. ...

    android GoogleMap定位(四)

    在Android开发中,GoogleMap API是一个非常重要的工具,它允许开发者在应用中集成地图功能,实现定位、导航、路线规划等复杂操作。本篇将详细探讨如何在Android应用中使用GoogleMap进行定位。 首先,我们需要在项目...

    google-Map.zip_android_android google map_android map_google map

    在Android开发中,集成Google Maps服务是一个...随着对Google Maps API的深入学习和实践,你可以创建出更加复杂和个性化的地图应用。记住,不断地测试和优化你的代码,以确保在不同设备和网络环境下的良好用户体验。

    GoogleMap谷歌地图demo

    总结来说,这个"GoogleMap谷歌地图demo"是一个利用GoogleMap API实现的综合地图应用实例,可能包含了地图显示、定位、路线规划、自定义样式等多种功能。开发者可以通过学习和分析这个demo,掌握如何在自己的项目中...

    GoogleMap地图控件应用源码_googlemapcontrol.zip

    这个描述简洁明了,表明了源码是关于GoogleMap地图控件的实现,可能是用某种编程语言(如Java、JavaScript、C#等)编写,目的是帮助开发者理解和学习如何在实际项目中应用。源码通常包括了地图的加载、标记设置、...

    android 谷歌地图应用

    在Android平台上开发应用程序时,谷歌地图API是一个强大的工具,它允许开发者将地图功能无缝集成到他们的应用中。本文将深入探讨如何在Android应用中使用谷歌地图,并解决在显示地图时可能遇到的问题。 首先,让...

    android google地图显示地图图层叠加

    总的来说,Android应用结合Google Maps API可以创建出强大的地图应用,不仅可以显示基础地图,还能根据需求叠加各种自定义图层,提供丰富的用户体验。通过不断学习和实践,你可以掌握更多高级特性,如实时交通信息、...

    android写的google map api 应用

    总的来说,使用Android和Google Maps API开发地图应用是一项涉及多方面技术的工作,包括Android权限管理、地图组件的使用、地图数据的加载与交互,以及位置服务的集成。通过不断学习和实践,你可以创建出功能丰富、...

    Android google map apiv2的最新申请密钥方式

    在Android开发中,集成Google Maps API V2是一个常见的需求,它允许开发者在应用程序中嵌入交互式地图,提供导航、定位、标记等丰富的地图功能。本文将详细介绍如何申请Google Maps API V2的最新密钥,并提供一些...

    android google map example

    在Android开发中,集成Google Maps是一项常见的任务,它允许开发者为用户提供交互式的地图视图。在本示例中,我们将深入探讨...通过这些基础知识,开发者可以构建出功能丰富的地图应用,提供各种地理位置相关的服务。

    android扩展TiledServiceLayer 实现天地图和谷歌地图的浏览

    总之,`TiledServiceLayer`是Android地图应用开发中的一个重要工具,通过自定义服务层,开发者可以轻松地接入各种地图服务,如天地图和谷歌地图。在实际开发中,需要充分考虑性能、用户体验和错误处理,以构建出高...

    Android位置服务与地图应用

    在Android平台上,位置服务与地图应用是开发移动应用不可或缺的一部分,尤其对于提供导航、本地搜索、社交等功能的应用来说,它们的重要性不言而喻。本文将深入探讨这两个关键领域,包括如何利用Google Maps API以及...

    精心收集的android googlemap开发实例与教程

    通过这个"android googlemap开发实例与教程",开发者不仅能学习到基础的Google Maps API使用方法,还能深入理解如何结合GPS定位和地图数据来打造功能丰富的地图应用。无论是初学者还是有经验的开发者,都能从中受益...

    android 应用 源代码——谷歌地图

    在Android应用开发中,谷歌地图(Google Maps)是不可或缺的一部分,它允许开发者集成地图功能到自己的应用程序中,为用户提供地理...掌握这些知识点后,开发者能够创建丰富的地图应用,提供各种基于地理位置的服务。

    Android下GoogleMap地图类应用程序的开发.pdf

    Android下GoogleMap地图类应用程序的开发.pdf

    基于android的google map API应用设计

    在基于Android的Google Map API应用设计中,开发者可以利用谷歌提供的API来构建一系列与地理位置相关的功能,极大地丰富了移动应用程序的用户体验。以下是基于这个主题的一些关键知识点: 1. **Android平台**:...

Global site tag (gtag.js) - Google Analytics