Android 百度地图SDK

官方文档
http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5
http://lbsyun.baidu.com/index.php?title=androidsdk

1.获取密钥

http://lbsyun.baidu.com/apiconsole/key
创建应用:–>
应用名称:BaiduMapTest
应用类型:Android SDK
发布版SHA1:A9:7D:70:70:4C:67:83:71:AC:FD:18:6E:EF:9B:08:FF:CF:07:A6:BD
如何获取:AS–>Build–>Generate Signed APK
创建签名文件key.jks

keytool -v -list -keystore key.jks

SHA1: A9:7D:70:70:4C:67:83:71:AC:FD:18:6E:EF:9B:08:FF:CF:07:A6:BD
包名:com.bshui.baidumaptest
提交后生成访问应用AK:HSyrKQAG1BktzbYSqtR8ZQHTPwleEGaV

2.开发包&Demo下载

最新版本为:Android 地图 SDK v4.5.2
http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
在导入时需要根据包名和SHA1生成一个key在BaiduMapsApiASDemo的AndroidMainfest.xml里添加
运行Demo测试地图功能

3.Android Studio工程配置

1)开发包拷到工程
将BaiduLBS_Android.jar放到app/libs目录下
右击BaiduLBS_Android.jar Add As Library…加入库
同步后build.gradle中会出现 implementation files(‘libs/BaiduLBS_Android.jar’)
2)在libs下新建armeabi目录
导入:libBaiduMapSDK_base_v4_5_2.so,libBaiduMapSDK_map_v4_5_2.so,liblocSDK7b.so
在app的build.gradle中说明so为该libs路径
sourceSets {
main {
jniLibs.srcDir ‘libs’
}
}

4.BaiduMapTest工程开发

一:显示地图
1)在AndroidManifest中添加开发密钥,所需权限
在applicaion中添加开发密钥

<meta-data
     android:name="com.baidu.lbsapi.API_KEY"
     android:value="HSyrKQAG1BktzbYSqtR8ZQHTPwleEGaV" 

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" />

3)在布局xml文件中添加地图控件

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

4)在应用程序创建时初始化SDK引用的Context全局变量
SDKInitializer.initialize(getApplicationContext());
//应在setContentView之前
setContentView(R.layout.activity_main);
5)创建地图Activity,管理生命周期

public class MainActivity extends AppCompatActivity {
    private MapView mMapView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //地图控件引用
        mMapView = (MapView)findViewById(R.id.bmapView);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();
    }
}

```二:切换地图
1)普通地图

    mMapView = (MapView)findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();
    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
2)卫星地图

    mMapView = (MapView)findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();
    mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
3)实时路况图

    mMapView = (MapView)findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();
    mBaiduMap.setTrafficEnabled(true);

  三:显示定位
1)自定义定位模式、定位图标、精度圈颜色

mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(
              mCurrentMode, true, mCurrentMarker,
              accuracyCircleFillColor, accuracyCircleStrokeColor));
如果不设置则用默认的

2)实现定位功能
使用百度定位SDK获取相应的位置信息,然后利用地图SDK中的接口,您可以在地图上展示实时位置信息
需要在AndroidManifest.xml中添加location服务






<div class="se-preview-section-delimiter"></div>

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

如果不开的话public void onReceiveLocation(BDLocation location)只执行一次,只能获取一次定位数据


LocationClient mLocClient;
     public MyLocationListenner myListener = new MyLocationListenner();
       // 开启定位图层
        mBaiduMap.setMyLocationEnabled(true);
        //定位初始化
        mLocClient = new LocationClient(getApplicationContext());//传入全局的context
        mLocClient.registerLocationListener(myListener);//注册定位监听函数
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);
        mLocClient.setLocOption(option);
        mLocClient.start();//启动定位sdk
定位服务类:LocationClient,相当于一个有定位服务的客户端,只能在主线程中启动
配置定位SDK参数的类:LocationClientOption
setIsNeedAddress(boolean isNeed)设置是否要地址信息,默认为无地址
setOpenGps(boolean openGps)设置是否打开gps进行定位
setScanSpan(int scanSpan)设置扫描间隔,单位是ms
BDLocationListener定位请求回调接口
BDLocation内部封装了经纬度、半径等属性

java.lang.String    getAddrStr()    获取详细地址信息
double  getAltitude()   获取高度信息,目前只有是GPS定位结果时才有效,单位米(还没有实现)
java.lang.String    getCity()   获取城市
java.lang.String    getCountry()    获取国家
double  getLatitude()   获取纬度坐标
double  getLongitude()  获取经度坐标
java.lang.String    getProvince()   获取省份
float   getSpeed()  获取速度,仅gps定位结果时有速度信息,单位公里/小时,默认值0.0f
java.lang.String    getStreet()     获取街道信息
java.lang.String    getTime()   server返回的当前定位时间
float   getRadius()     获取定位精度,默认值0.0f
float   getDirection()  gps定位结果时,行进的方向,单位度

public class MyLocationListenner implements BDLocationListener {

    @Override
    public void onReceiveLocation(BDLocation location) {
        // map view 销毁后不在处理新接收的位置
        if (location == null || mMapView == null) {
            return;
        }

        mCurrentLat = location.getLatitude();
        mCurrentLon = location.getLongitude();
        mCurrentAccracy = location.getRadius();
        Log.i("tag","lat:"+mCurrentLat+"\n"+
                "lon:"+mCurrentLon);
        //构造定位数据
        locData = new MyLocationData.Builder()
                .accuracy(location.getRadius())
                // 此处设置开发者获取到的方向信息,顺时针0-360
                .direction(mCurrentDirection).latitude(location.getLatitude())
                .longitude(location.getLongitude()).build();
        mBaiduMap.setMyLocationData(locData);
        if (isFirstLoc) {
            isFirstLoc = false;
            LatLng ll = new LatLng(location.getLatitude(),
                    location.getLongitude());
            MapStatus.Builder builder = new MapStatus.Builder();
            builder.target(ll).zoom(17.0f);
            mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
        }
    }

    public void onReceivePoi(BDLocation poiLocation) {
    }
}

“`

3)隐藏百度左下角的logo

//隐藏左下角的logo
View child = mMapView.getChildAt(1);
if(child !=null){
child.setVisibility(View.INVISIBLE);
}
这里写图片描述

Demo代码
http://download.csdn.net/download/shui1025701856/10198319

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值