android Google Map地图应用与实现
来源:互联网 发布:随机红包算法 编辑:程序博客网 时间:2024/04/27 13:40
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地图应用与实现
- google map v2 显示美洲地图 小例子 android应用
- android GOOGLE MAP应用
- Google map离线API实现离线地图
- Android用户定位Google Map显示地图
- android google map 地图 ItemizedOverlay 选中
- Android开发--使用Google地图(Map View)
- Android Google Map 地图中自定义当前位置
- android Google Map API V2(显示地图)
- android Google Map API V2(显示地图)
- 苹果手机MapKit 与Google Map SDK 在地图应用中 杂谈
- 使用Google Map Api在Android平台上开发地图应用1
- 使用Google Map Api在Android平台上开发地图应用2
- 使用Google Map Api在Android平台上开发地图应用3
- 使用Google Map Api在Android平台上开发地图应用4
- android应用开发全程实录-关于google map的部分章节-漂亮的气泡地图
- 应用ArcIMS构建Google Map风格的地图应用
- Android开发--地图与定位应用--申请Google地图服务(API Key)
- ie下解决 强制换行的css
- 黑马程序员 Java基础 03
- Linux 中的零拷贝技术(二)
- eclipse下JNI的初步实现
- Linux如何退出VI编辑器
- android Google Map地图应用与实现
- HDOJ 2222 Keywords Search
- Linux中把普通用户提升为root用户权限
- java.lang.IllegalStateException: getOutputStream() has already been called for this response完美解决方案
- 让android程序根据重力感应旋转屏幕(支持4个方向旋转)
- poj2034
- C语言面试题之——getmemory
- VC多线程编程1
- 数据的离散化