百度地图AndroidSDK:定位、画区域、线路规划、搜索

本文介绍了如何接入百度地图Android SDK,包括准备工作、Android Studio配置。详细讲解了公交线路搜索、定位、搜索关键词、线路规划和标记操作等功能的实现,提供了相关博客链接作为深入学习资料。
摘要由CSDN通过智能技术生成

参考学习:
百度地图官网:
androidsdk/guide/basicmap - Wiki http://lbsyun.baidu.com/index.php?title=androidsdk/guide/basicmap
很有学习价值!!!
Small_Cake的专栏里对于百度地图的使用做了很详细的介绍
1.深入学习百度地图Android SDK v4.0.0【第一关】基础地图 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52193921
2.深入学习百度地图Android SDK v4.0.0【第二关】公交地图 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52199135
3.深入学习百度地图Android SDK v4.0.0【第三关】路线规划 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52212402
4.深入学习百度地图Android SDK v4.0.0【第四关】OpenGL绘制 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52336116
5.深入学习百度地图Android SDK v4.0.0【第五关】瓦片图层 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52370635
6.深入学习百度地图Android SDK v4.0.0【第六关】室内地图 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52370729
7.深入学习百度地图Android SDK v4.0.0【第七关】周边雷达 - xiaoshubing的专栏 - CSDN博客 http://blog.csdn.net/xiaoshubing/article/details/52412099

注意事项:

1.libs文件夹放入jar包,在main里新建的jniLibs文件夹放入.so文件
2.当开发完进行打包apk时i,安装apk在手机上后,之前是会显示地图的,但现在却不显示地图了,只显示网格,这就说明是百度地图的Key有问题了。开发和打包apk对应的key是不一样的,详情请看:在android studio直接运行时百度地图显示,真机打包apk时地图不显示的问题

接入百度地图SDK:

准备:

1.请好好看看:百度地图官网开发指南
2.在控制台创建应用:获取自己电脑Debug模式下的SHA1值(这个只能是此电脑的开发模式下的使用,所以换个电脑或打包apk都不能正常显示地图,必须换成对应的SHA1,则就必须重新在控制台新建应用,输入对应的SHA1值啦)
3.下载SDKSDK下载 - 百度LBS开放平台 http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar

Androidstudio配置:

1.把你下载下来的sdk(文件夹的libs中的)全部拷贝到你app的libs中,比如这样

2.app的gradle:

android{
sourceSets{
        main{
            jniLibs.srcDir 'libs'
            //说明so的路径为该libs路径,关联所有地图SDK的so文件
        }
    }
}
dependencies{
implementation files('libs/BaiduLBS_Android.jar') 引进你所有的jar包
}

3.权限:
记得在程序中要动态申请定位权限才能实现定位等功能哦!

<manifest>
    <!-- 百度地图需要的权限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_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"/>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_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" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <application              
        <activity android:name=".MainActivity">            
        </activity>
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="你的key" />     
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote"/>       
    </application>

</manifest>

具体代码:

BaseApplication:

public class BaseApplication extends Application{   
    @Override
    public void onCreate() {
        super.onCreate();
        SDKInitializer.initialize(this);        
    }   
}

把每一个功能都独立出来了,一个大功能一个界面。
1.公交线路搜索:

1.布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#FFFFFF"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/ed_start_bus_station"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入城市名称"/>
    <EditText
        android:id="@+id/ed_end_bus_station"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入公交路线号"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tv_choose_bus"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="搜索公交路线"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:gravity="center"
            android:layout_weight="1"
            android:textSize="21sp"/>
        <TextView
            android:id="@+id/tv_previous"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上一个"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:gravity="center"
            android:layout_weight="1"
            android:textSize="21sp"/>
        <TextView
            android:id="@+id/tv_next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下一个"
            android:layout_marginLeft="15dp"
            android:layout_marginRight="15dp"
            android:gravity="center"
            android:layout_weight="1"
            android:textSize="21sp"/>
    </LinearLayout>
    <com.baidu.mapapi.map.MapView
        android:id="@+id/map_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:clickable="true" />
</LinearLayout>

2.activity代码:


/**
 * 公交路线:
 * 根据城市名称、公交路线号,搜索公交路线
 */
public class ActBusLineMap extends AppCompatActivity
        implements OnGetBusLineSearchResultListener, OnGetPoiSearchResultListener {

    @BindView(R.id.map_view)
    MapView mapView;
    @BindView(R.id.ed_start_bus_station)
    EditText edStartBusStation;
    @BindView(R.id.ed_end_bus_station)
    EditText edEndBusStation;
    @BindView(R.id.tv_choose_bus)
    TextView tvChooseBus;
    @BindView(R.id.tv_previous)
    TextView tvPrevious;
    @BindView(R.id.tv_next)
    TextView tvNext;

    private BaiduMap mBaiduMap;

    private PoiSearch poiSearch;
    private BusLineSearch busLineSearch;
    private List<String> busLines = new ArrayList<>();
    private int uidPostion = 0;//当前选中第几条路线
    private BusLineResult mBusLineResult;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_buslinemap);
        ButterKnife.bind(this);

        mBaiduMap = mapView.getMap();

        init();
        onEvent();

    }

    /**
     * 点击事件
     * @param view
     */
    @OnClick({R.id.tv_choose_bus, R.id.tv_previous, R.id.tv_next})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.tv_choose_bus:
                poiSearch.searchInCity(
                        new PoiCitySearchOption().city(
                                edStartBusStation.getText().toString()).keyword(edEndBusStation.getText().toString()));
                break;
            case R.id.tv_previous:
                if (uidPostion>0){
                    uidPostion--;
                    searchBusLine();
                }
                break;
            case R.id.tv_next:
                if (uidPostion<(busLines.size()-1)){
                    uidPostion++;
                    searchBusLine();
                }
                break;
        }
    }

    private void onEvent() {

    }

    public void init() {
        //检索查询初始化并监听
        poiSearch = PoiSearch.newInstance();
        poiSearch.setOnGetPoiSearchResultListener(this);
        //路线查询初始化并监听
        busLineSearch = BusLineSearch.newInstance();
        busLineSearch.setOnGetBusLineSearchResultListener(this);
        //公交路线覆盖物,并设置路线的点击事件
        overlay = new BusLineOverlay(mBaiduMap){
            @Override
            public boolean onBusStationClick(int index) {
                if (mBusLineResult.getStations() != null
                        && mBusLineResult.getStations().get(index) != null) {
                    showToast( mBusLineResult.getStations().get(index).getTitle() );
                }
                return true;
            };
        };
        mBaiduMap.setOnMarkerClickListener(overlay);
    }


    /**
     * 【1】首先检索查询
     *
     * @param poiResult
     */
    @Override
    public void onGetPoiResult(PoiResult poiResult) {
        if (poiResult == null || poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {
            showToast("抱歉,未找到结果" );
            return;
        }
        if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {

            busLines.clear();
            List<PoiInfo> allPoi = poiResult.getAllPoi();
            if (allPoi == null || allPoi.size() == 0) return;
           
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值