android怎么添加GPS地图,Android中GPS/Map的运用

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();

Listoverlays=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

addresses=gc.getFromLocation(latitude,longitude,1);

StringBuildersb=newStringBuilder();

if(addresses.size()>0)

{

Addressaddress=addresses.get(0);

for(inti=0;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中:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值