- packagecom.liufeng.baidumap;
- importAndroid.os.Bundle;
- importAndroid.view.View;
- importAndroid.view.View.OnClickListener;
- importAndroid.widget.Button;
- importAndroid.widget.EditText;
- importAndroid.widget.TextView;
- importcom.baidu.mapapi.BMapManager;
- importcom.baidu.mapapi.GeoPoint;
- importcom.baidu.mapapi.MKAddrInfo;
- importcom.baidu.mapapi.MKDrivingRouteResult;
- importcom.baidu.mapapi.MKPoiInfo;
- importcom.baidu.mapapi.MKPoiResult;
- importcom.baidu.mapapi.MKSearch;
- importcom.baidu.mapapi.MKSearchListener;
- importcom.baidu.mapapi.MKTransitRouteResult;
- importcom.baidu.mapapi.MKWalkingRouteResult;
- importcom.baidu.mapapi.MapActivity;
- /**
- *根据经纬度查询地址信息
- *
- *@authorliufeng
- *@date2011-05-03
- */
- publicclassQueryAddressActivityextendsMapActivity{
- //定义地图引擎管理类
- privateBMapManagermapManager;
- //定义搜索服务类
- privateMKSearchmMKSearch;
- privateEditTextlongitudeEditText;
- privateEditTextlatitudeEditText;
- privateTextViewaddressTextView;
- privateButtonqueryButton;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.query_address);
- //初始化MapActivity
- mapManager=newBMapManager(getApplication());
- //init方法的第一个参数需填入申请的APIKey
- mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4",null);
- super.initMapActivity(mapManager);
- //初始化MKSearch
- mMKSearch=newMKSearch();
- mMKSearch.init(mapManager,newMySearchListener());
- //通过id查询在布局文件中定义的控件
- longitudeEditText=(EditText)findViewById(R.id.longitude_input);
- latitudeEditText=(EditText)findViewById(R.id.latitude_input);
- addressTextView=(TextView)findViewById(R.id.address_text);
- queryButton=(Button)findViewById(R.id.query_button);
- //给地址查询按钮设置单击事件监听器
- queryButton.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- //用户输入的经度值
- StringlongitudeStr=longitudeEditText.getText().toString();
- //用户输入的纬度值
- StringlatitudeStr=latitudeEditText.getText().toString();
- try{
- //将用户输入的经纬度值转换成int类型
- intlongitude=(int)(1000000*Double.parseDouble(longitudeStr));
- intlatitude=(int)(1000000*Double.parseDouble(latitudeStr));
- //查询该经纬度值所对应的地址位置信息
- mMKSearch.reverseGeocode(newGeoPoint(latitude,longitude));
- }catch(Exceptione){
- addressTextView.setText("查询出错,请检查您输入的经纬度值!");
- }
- }
- });
- }
- @Override
- protectedbooleanisRouteDisplayed(){
- returnfalse;
- }
- @Override
- protectedvoidonDestroy(){
- if(mapManager!=null){
- //程序退出前需调用此方法
- mapManager.destroy();
- mapManager=null;
- }
- super.onDestroy();
- }
- @Override
- protectedvoidonPause(){
- if(mapManager!=null){
- //终止百度地图API
- mapManager.stop();
- }
- super.onPause();
- }
- @Override
- protectedvoidonResume(){
- if(mapManager!=null){
- //开启百度地图API
- mapManager.start();
- }
- super.onResume();
- }
- /**
- *内部类实现MKSearchListener接口,用于实现异步搜索服务
- *
- *@authorliufeng
- */
- publicclassMySearchListenerimplementsMKSearchListener{
- /**
- *根据经纬度搜索地址信息结果
- *
- *@paramresult搜索结果
- *@paramiError错误号(0表示正确返回)
- */
- @Override
- publicvoidonGetAddrResult(MKAddrInforesult,intiError){
- if(result==null){
- return;
- }
- StringBuffersb=newStringBuffer();
- //经纬度所对应的位置
- sb.append(result.strAddr).append("/n");
- //判断该地址附近是否有POI(PointofInterest,即兴趣点)
- if(null!=result.poiList){
- //遍历所有的兴趣点信息
- for(MKPoiInfopoiInfo:result.poiList){
- sb.append("----------------------------------------").append("/n");
- sb.append("名称:").append(poiInfo.name).append("/n");
- sb.append("地址:").append(poiInfo.address).append("/n");
- sb.append("经度:").append(poiInfo.pt.getLongitudeE6()/1000000.0f).append("/n");
- sb.append("纬度:").append(poiInfo.pt.getLatitudeE6()/1000000.0f).append("/n");
- sb.append("电话:").append(poiInfo.phoneNum).append("/n");
- sb.append("邮编:").append(poiInfo.postCode).append("/n");
- //poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路
- sb.append("类型:").append(poiInfo.ePoiType).append("/n");
- }
- }
- //将地址信息、兴趣点信息显示在TextView上
- addressTextView.setText(sb.toString());
- }
- /**
- *驾车路线搜索结果
- *
- *@paramresult搜索结果
- *@paramiError错误号(0表示正确返回)
- */
- @Override
- publicvoidonGetDrivingRouteResult(MKDrivingRouteResultresult,intiError){
- }
- /**
- *POI搜索结果(范围检索、城市POI检索、周边检索)
- *
- *@paramresult搜索结果
- *@paramtype返回结果类型(11,12,21:poi列表7:城市列表)
- *@paramiError错误号(0表示正确返回)
- */
- @Override
- publicvoidonGetPoiResult(MKPoiResultresult,inttype,intiError){
- }
- /**
- *公交换乘路线搜索结果
- *
- *@paramresult搜索结果
- *@paramiError错误号(0表示正确返回)
- */
- @Override
- publicvoidonGetTransitRouteResult(MKTransitRouteResultresult,intiError){
- }
- /**
- *步行路线搜索结果
- *
- *@paramresult搜索结果
- *@paramiError错误号(0表示正确返回)
- */
- @Override
- publicvoidonGetWalkingRouteResult(MKWalkingRouteResultresult,intiError){
- }
- }
- }
3)AndroidManifest.xml中的配置
- <?xmlversion="1.0"encoding="utf-8"?>
- <manifestxmlns:Android="http://schemas.android.com/apk/res/android"
- package="com.liufeng.baidumap"
- Android:versionCode="1"
- Android:versionName="1.0">
- <applicationAndroid:icon="@drawable/icon"android:label="@string/app_name">
- <activityAndroid:name=".QueryAddressActivity"android:label="@string/app_name">
- <intent-filter>
- <actionAndroid:name="android.intent.action.MAIN"/>
- <categoryAndroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- </application>
- <uses-sdkAndroid:minSdkVersion="4"/>
- <!--访问网络的权限-->
- <uses-permissionAndroid:name="android.permission.INTERNET"/>
- <!--访问精确位置的权限-->
- <uses-permissionAndroid:name="android.permission.ACCESS_FINE_LOCATION"/>
- <!--访问网络状态的权限-->
- <uses-permissionAndroid:name="android.permission.ACCESS_NETWORK_STATE"/>
- <!--访问WIFI网络状态的权限-->
- <uses-permissionAndroid:name="android.permission.ACCESS_WIFI_STATE"/>
- <!--改变WIFI网络状态的权限-->
- <uses-permissionAndroid:name="android.permission.CHANGE_WIFI_STATE"/>
- <!--读写存储卡的权限-->
- <uses-permissionAndroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <!--读取电话状态的权限-->
- <uses-permissionAndroid:name="android.permission.READ_PHONE_STATE"/>
- </manifest>
locationManager = (LocationManager) GPSTestActivity.this.getSystemService(Context.LOCATION_SERVICE);
String provier = LocationManager.GPS_PROVIDER; location = locationManager.getLastKnownLocation(provier);
if (location == null) { Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);
provier = locationManager.getBestProvider(criteria, true);
location = locationManager.getLastKnownLocation(provier); }
自 http://www.cnblogs.com/caishuowen/archive/2011/12/14/2287669.html