`

百度地图中android获取经纬度和地方名称

 
阅读更多

package com.liufeng.baidumap;  

  

import Android.os.Bundle;  

import Android.view.View;  

import Android.view.View.OnClickListener;  

import Android.widget.Button;  

import Android.widget.EditText;  

import Android.widget.TextView;  

  

import com.baidu.mapapi.BMapManager;  

import com.baidu.mapapi.GeoPoint;  

import com.baidu.mapapi.MKAddrInfo;  

import com.baidu.mapapi.MKDrivingRouteResult;  

import com.baidu.mapapi.MKPoiInfo;  

import com.baidu.mapapi.MKPoiResult;  

import com.baidu.mapapi.MKSearch;  

import com.baidu.mapapi.MKSearchListener;  

import com.baidu.mapapi.MKTransitRouteResult;  

import com.baidu.mapapi.MKWalkingRouteResult;  

import com.baidu.mapapi.MapActivity;  

  

/** 

 * 根据经纬度查询地址信息 

 *  

 * @author liufeng 

 * @date 2011-05-03 

 */  

public class QueryAddressActivity extends MapActivity {  

    // 定义地图引擎管理类   

    private BMapManager mapManager;  

    // 定义搜索服务类   

    private MKSearch mMKSearch;  

  

    private EditText longitudeEditText;  

    private EditText latitudeEditText;  

    private TextView addressTextView;  

    private Button queryButton;  

  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.query_address);  

  

        // 初始化MapActivity   

        mapManager = new BMapManager(getApplication());  

        // init方法的第一个参数需填入申请的API Key   

        mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);  

        super.initMapActivity(mapManager);  

  

        // 初始化MKSearch   

        mMKSearch = new MKSearch();  

        mMKSearch.init(mapManager, new MySearchListener());  

  

        // 通过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(new OnClickListener() {  

            @Override  

            public void onClick(View v) {  

                // 用户输入的经度值   

                String longitudeStr = longitudeEditText.getText().toString();  

                // 用户输入的纬度值   

                String latitudeStr = latitudeEditText.getText().toString();  

  

                try {  

                    // 将用户输入的经纬度值转换成int类型   

                    int longitude = (int) (1000000 * Double.parseDouble(longitudeStr));  

                    int latitude = (int) (1000000 * Double.parseDouble(latitudeStr));  

  

                    // 查询该经纬度值所对应的地址位置信息   

                    mMKSearch.reverseGeocode(new GeoPoint(latitude, longitude));  

                } catch (Exception e) {  

                    addressTextView.setText("查询出错,请检查您输入的经纬度值!");  

                }  

            }  

        });  

    }  

  

    @Override  

    protected boolean isRouteDisplayed() {  

        return false;  

    }  

  

    @Override  

    protected void onDestroy() {  

        if (mapManager != null) {  

            // 程序退出前需调用此方法   

            mapManager.destroy();  

            mapManager = null;  

        }  

        super.onDestroy();  

    }  

  

    @Override  

    protected void onPause() {  

        if (mapManager != null) {  

            // 终止百度地图API   

            mapManager.stop();  

        }  

        super.onPause();  

    }  

  

    @Override  

    protected void onResume() {  

        if (mapManager != null) {  

            // 开启百度地图API   

            mapManager.start();  

        }  

        super.onResume();  

    }  

  

    /** 

     * 内部类实现MKSearchListener接口,用于实现异步搜索服务 

     *  

     * @author liufeng 

     */  

    public class MySearchListener implements MKSearchListener {  

        /** 

         * 根据经纬度搜索地址信息结果 

         *  

         * @param result 搜索结果 

         * @param iError 错误号(0表示正确返回) 

         */  

        @Override  

        public void onGetAddrResult(MKAddrInfo result, int iError) {  

            if (result == null) {  

                return;  

            }  

            StringBuffer sb = new StringBuffer();  

            // 经纬度所对应的位置   

            sb.append(result.strAddr).append("/n");  

  

            // 判断该地址附近是否有POI(Point of Interest,即兴趣点)   

            if (null != result.poiList) {  

                // 遍历所有的兴趣点信息   

                for (MKPoiInfo poiInfo : 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());  

        }  

  

        /** 

         * 驾车路线搜索结果 

         *  

         * @param result 搜索结果 

         * @param iError 错误号(0表示正确返回) 

         */  

        @Override  

        public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {  

        }  

  

        /** 

         * POI搜索结果(范围检索、城市POI检索、周边检索) 

         *  

         * @param result 搜索结果 

         * @param type 返回结果类型(11,12,21:poi列表 7:城市列表) 

         * @param iError 错误号(0表示正确返回) 

         */  

        @Override  

        public void onGetPoiResult(MKPoiResult result, int type, int iError) {  

        }  

  

        /** 

         * 公交换乘路线搜索结果 

         *  

         * @param result 搜索结果 

         * @param iError 错误号(0表示正确返回) 

         */  

        @Override  

        public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {  

        }  

  

        /** 

         * 步行路线搜索结果 

         *  

         * @param result 搜索结果 

         * @param iError 错误号(0表示正确返回) 

         */  

        @Override  

        public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {  

        }  

    }  

}  

   3)AndroidManifest.xml中的配置     

 

 

<?xml version="1.0" encoding="utf-8"?>  

<manifest xmlns:Android="http://schemas.android.com/apk/res/android"  

      package="com.liufeng.baidumap"  

      Android:versionCode="1"  

      Android:versionName="1.0">  

    <application Android:icon="@drawable/icon" android:label="@string/app_name">  

        <activity Android:name=".QueryAddressActivity" android:label="@string/app_name">  

            <intent-filter>  

                <action Android:name="android.intent.action.MAIN" />  

                <category Android:name="android.intent.category.LAUNCHER" />  

            </intent-filter>  

        </activity>  

    </application>  

    <uses-sdk Android:minSdkVersion="4" />  

  

    <!-- 访问网络的权限 -->  

    <uses-permission Android:name="android.permission.INTERNET" />  

    <!-- 访问精确位置的权限 -->  

    <uses-permission Android:name="android.permission.ACCESS_FINE_LOCATION" />  

    <!-- 访问网络状态的权限 -->  

    <uses-permission Android:name="android.permission.ACCESS_NETWORK_STATE" />  

    <!-- 访问WIFI网络状态的权限 -->  

    <uses-permission Android:name="android.permission.ACCESS_WIFI_STATE" />  

    <!-- 改变WIFI网络状态的权限 -->  

    <uses-permission Android:name="android.permission.CHANGE_WIFI_STATE" />  

    <!-- 读写存储卡的权限 -->  

    <uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  

    <!-- 读取电话状态的权限 -->  

    <uses-permission Android: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);   }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics