您的位置:首页 > 移动开发 > Android开发

Android中GPS/Map的运用

2013-11-19 09:33 351 查看

publicclassActivity01extendsMapActivity
{
publicMapControllermapController;
publicMyLocationOverlaymyPosition;
publicMapViewmyMapView;
privatestaticfinalintZOOM_IN=Menu.FIRST;
privatestaticfinalintZOOM_OUT=Menu.FIRST+1;

publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得LocationManager实例
LocationManagerlocationManager;
Stringcontext=Context.LOCATION_SERVICE;
locationManager=(LocationManager)getSystemService(context);
myMapView=(MapView)findViewById(R.id.MapView01);
//取得MapController实例,控制地图
mapController=myMapView.getController();
//设置显示模式
myMapView.setSatellite(true);
myMapView.setStreetView(true);
//设置缩放控制,这里我们自己实现缩放菜单
myMapView.displayZoomControls(false);
//设置使用MyLocationOverlay来绘图
mapController.setZoom(17);
myPosition=newMyLocationOverlay();
List<Overlay>overlays=myMapView.getOverlays();
overlays.add(myPosition);
//设置Criteria(服务商)的信息
Criteriacriteria=newCriteria();
//经度要求
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
//取得效果最好的criteria
Stringprovider=locationManager.getBestProvider(criteria,true);
//得到坐标相关的信息
Locationlocation=locationManager.getLastKnownLocation(provider);
//更新坐标
updateWithNewLocation(location);
//注册一个周期性的更新,3000ms更新一次
//locationListener用来监听定位信息的改变
locationManager.requestLocationUpdates(provider,3000,0,locationListener);
}
privatevoidupdateWithNewLocation(Locationlocation)
{
StringlatLongString;
TextViewmyLocationText=(TextView)findViewById(R.id.TextView01);

StringaddressString="没有找到地址\n";

if(location!=null)
{
//为绘制标志的类设置坐标
myPosition.setLocation(location);
//取得经度和纬度
DoublegeoLat=location.getLatitude()*1E6;
DoublegeoLng=location.getLongitude()*1E6;
//将其转换为int型
GeoPointpoint=newGeoPoint(geoLat.intValue(),geoLng.intValue());
//定位到指定坐标
mapController.animateTo(point);
doublelat=location.getLatitude();
doublelng=location.getLongitude();
latLongString="经度:"+lat+"\n纬度:"+lng;

doublelatitude=location.getLatitude();
doublelongitude=location.getLongitude();
//更具地理环境来确定编码
Geocodergc=newGeocoder(this,Locale.getDefault());
try
{
//取得地址相关的一些信息\经度、纬度
List<Address>addresses=gc.getFromLocation(latitude,longitude,1);
StringBuildersb=newStringBuilder();
if(addresses.size()>0)
{
Addressaddress=addresses.get(0);
for(inti=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(IOExceptione){}
}
else
{
latLongString="没有找到坐标.\n";
}
//显示
myLocationText.setText("你当前的坐标如下:\n"+latLongString+"\n"+addressString);
}
privatefinalLocationListenerlocationListener=newLocationListener()
{
//当坐标改变时触发此函数
publicvoidonLocationChanged(Locationlocation)
{
updateWithNewLocation(location);
}
//Provider被disable时触发此函数,比如GPS被关闭
publicvoidonProviderDisabled(Stringprovider)
{
updateWithNewLocation(null);
}
//Provider被enable时触发此函数,比如GPS被打开
publicvoidonProviderEnabled(Stringprovider){}
//Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){}
};
protectedbooleanisRouteDisplayed()
{
returnfalse;
}
//为应用程序添加菜单
publicbooleanonCreateOptionsMenu(Menumenu)
{
super.onCreateOptionsMenu(menu);
menu.add(0,ZOOM_IN,Menu.NONE,"放大");
menu.add(0,ZOOM_OUT,Menu.NONE,"缩小");
returntrue;
}
publicbooleanonOptionsItemSelected(MenuItemitem)
{
super.onOptionsItemSelected(item);
switch(item.getItemId())
{
case(ZOOM_IN):
//放大
mapController.zoomIn();
returntrue;
case(ZOOM_OUT):
//缩小
mapController.zoomOut();
returntrue;
}
returntrue;
}

classMyLocationOverlayextendsOverlay
{
LocationmLocation;
//在更新坐标时,设置该坐标,一边画图
publicvoidsetLocation(Locationlocation)
{
mLocation=location;
}
@Override
publicbooleandraw(Canvascanvas,MapViewmapView,booleanshadow,longwhen)
{
super.draw(canvas,mapView,shadow);
Paintpaint=newPaint();
PointmyScreenCoords=newPoint();
//将经纬度转换成实际屏幕坐标
GeoPointtmpGeoPoint=newGeoPoint((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);
Bitmapbmp=BitmapFactory.decodeResource(getResources(),R.drawable.home);
canvas.drawBitmap(bmp,myScreenCoords.x,myScreenCoords.y,paint);
canvas.drawText("HereamI",myScreenCoords.x,myScreenCoords.y,paint);
returntrue;
}
}
}

XML中:
<uses-libraryandroid:name="com.google.android.maps"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>

附件:http://down.51cto.com/data/2363761
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  map GPS Android