百度地图之定位篇

来源:互联网 发布:淘宝免费开店要钱吗 编辑:程序博客网 时间:2024/06/06 02:20

百度地图开发平台:http://lbsyun.baidu.com/
这里讲述的是关于Android Studio工程配置方法:
在工程app/libs目录下放入baidumapapi_vX_X_X.jar,在工程中引用
jar包
src/main/jniLibs下的so包,放在jniLibs下自动加载
so包

代码部分:
第一步:创建并配置工程(可根据官网进行配置);
第二步:在AndroidManifest中添加开发密钥所需权限等信息(1)在application中添加开发密钥

<application>      <meta-data          android:name="com.baidu.lbsapi.API_KEY"          android:value="开发者 key" />  </application>

百度地图定位service

<service            android:name="com.baidu.location.f"            android:enabled="true"            android:process=":remote" >        </service>

2)添加所需权限

 <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />    <!-- 这个权限用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <!-- 这个权限用于访问GPS定位 -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <!-- 用于读取手机当前的状态 -->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 访问网络,网络定位需要上网 -->    <uses-permission android:name="android.permission.INTERNET" />

第三步,在布局xml文件中添加地图控件;

<com.baidu.mapapi.map.MapView      android:id="@+id/bmapView"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:clickable="true" />

主要代码部分:
定位图片:定位图片

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext        SDKInitializer.initialize(this);        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。        SDKInitializer.setCoordType(CoordType.BD09LL);    }}

定位代码部分:

public class LocationActivity extends AppCompatActivity {    private MapView mMapView;    private BaiduMap mBaiduMap;    // 定位相关    private LocationClient mLocClient;    private MyLocationListener myListener = new MyLocationListener();    boolean isFirstLoc = true; // 是否首次定位    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_location);        // 地图初始化        mMapView = (MapView) findViewById(R.id.map_view);        mBaiduMap = mMapView.getMap();        //隐藏地图上百度地图logo图标        //mMapView.removeViewAt(1);       // 隐藏地图上比例尺        //mMapView.removeViewAt(2);        //隐藏地图上缩放控件        //mMapView.showZoomControls(false);        // 开启定位图层        mBaiduMap.setMyLocationEnabled(true);        // 定位初始化        mLocClient = new LocationClient(this);        mLocClient.registerLocationListener(myListener);        LocationClientOption option = new LocationClientOption();        //可选,默认false,设置是否使用gps        option.setOpenGps(true);        //可选,默认gcj02,设置返回的定位结果坐标系        option.setCoorType("bd09ll");        //可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的        option.setScanSpan(1000);        //可选,设置是否需要地址信息,默认不需要        option.setIsNeedAddress(true);        mLocClient.setLocOption(option);        mLocClient.start();    }    /**     * 定位SDK监听函数  异步获取定位结果     */    public class MyLocationListener implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            if (isFirstLoc){                isFirstLoc = false;                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());                //地图状态改变                MapStatus.Builder builder = new MapStatus.Builder();                builder.target(latLng).zoom(17.0f); //target() 设置地图中心点  zoom() 缩放值                //以动画更新地图状态 300ms                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));                //Marker标记                BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.icon_gcoding);                MarkerOptions markerOption = new MarkerOptions().position(latLng).icon(bitmap);                mBaiduMap.addOverlay(markerOption);                Toast.makeText(LocationActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();            }        }    }    @Override    protected void onPause() {        mMapView.onPause();        super.onPause();    }    @Override    protected void onResume() {        mMapView.onResume();        super.onResume();    }    @Override    protected void onDestroy() {        // 退出时销毁定位        mLocClient.stop();        // 关闭定位图层        mBaiduMap.setMyLocationEnabled(false);        mMapView.onDestroy();        mMapView = null;        super.onDestroy();    }}

activity_location.xml布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent">    <com.baidu.mapapi.map.MapView        android:id="@+id/map_view"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

效果图:
手机图片

0 0
原创粉丝点击