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

android 获取GPS经纬度在百度地图上绘制轨迹 实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹 1.将经纬度转换成百度地图坐标 2.在地图上绘制轨迹(已设置好地图) 阅读详情

参考学习:
百度地图官网:
androidsdk/guide/basicmap - Wiki http://lbsyun.baidu.com/index.php?title=androidsdk/guide/basicmap
很有学习价值!!!
Small_Cake的专栏里对于百度地图的使用做了很详细的介绍
1.深入学习百度地图Android SDK v4.0.0【第一关】基础地图 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/xiaoshubing/article/details/52193921
2.深入学习百度地图Android SDK v4.0.0【第二关】公交地图 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/xiaoshubing/article/details/52199135
3.深入学习百度地图Android SDK v4.0.0【第三关】路线规划 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/xiaoshubing/article/details/52212402
4.深入学习百度地图Android SDK v4.0.0【第四关】OpenGL绘制 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/xiaoshubing/article/details/52336116
5.深入学习百度地图Android SDK v4.0.0【第五关】瓦片图层 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/xiaoshubing/article/details/52370635
6.深入学习百度地图Android SDK v4.0.0【第六关】室内地图 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/xiaoshubing/article/details/52370729
7.深入学习百度地图Android SDK v4.0.0【第七关】周边雷达 - xiaoshubing的专栏 - 优快云博客 http://blog.youkuaiyun.com/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;
            for (int i = 0; i < allPoi.size(); i++) {
                PoiInfo poiInfo = allPoi.get(i);
                //如果是公交类型的路线,就把它的UID添加到集合中
                if (poiInfo.type == PoiInfo.POITYPE.BUS_LINE) {
              
百度地图SDK-----实现简单路线规划功能思路分析 实现路线规划功能根据官方文档可以分几个步骤实现,接下来就根据 官方文档 解释每个步骤代码所在的位置,从而理清思路。 官方文档    --------------------------------------------------------------------------------分割线----------------------------------- 阅读详情

相关推荐

Android 高德地图绘制线、添加图钉、添加线段纹理

1,画轨迹线 /** * 画轨迹图 * */ private void DrawLines(){ List<LatLng> mPointList = new ArrayList<>(); mPointList.add(new LatLng(26.57, 106.71)); mPointList.add(new LatLng(26.14,105.55)); mPointList.a

weixin_42602900的博客 4706

android百度地图实现范围内标注

前一阵因为写公司一个项目,有一个功能是在范围内进行标注,简单来说就是在当前位置附近XX米范围之内点击地图进行标注,超出范围则不能进行标注,现在把它抽取出来写成个demo。

sybil052的博客 3712

Android百度地图SDK v3.0.0 实战指南

本文还有配套的精品资源,点击获取 简介:Android百度地图SDK v3.0.0版本为开发者提供了丰富的API接口,用于集成地图显示、定位、路线规划等功能。更新的特性包括地图定制选项、定位服务优化、多点路径规划、地理编码支持、离线地图功能、搜索能力和增强的交互体验。本详解提供详细的操作指南和示例代码,助力开发者高效打造全面的地图应用。 1. Android百度地...

weixin_34725745的博客 1725

innovus中path group 的策略和应用(上)

在所有的后端工具里边,有三个重要的引擎:auto-place,CTS,auto-route三个。这里边的auto-place是决断了整个设计时序的基点。。当然,就算是到了CTS/route阶段后,也可以继续利用auto-place数据优化的功能,在数据库上做数据路径增量优化(optDesign -increment)。可以说,数据路径的优化手段,实际上是贯穿在整个后端流程上的。。看看这其中的奥妙和有趣的事情。ICer GO!

i_chip_backend的博客 4214

达梦DCA2023年10月培训及考试总结

本次培训共分三天,培训内容不单单是DCA的单机安装、实例创建、库表操作等,培训内容是把关系型数据库的理论及DM8的产品结合起来讲,很实用。具体的考试则是需要个人大量的线下练习,考试总体而言都是培训讲过的内容,只要用心听,好好练习,哪怕是没有计算机基础的童鞋也能考过。提示:以下是本篇文章正文内容,下面案例可供参考总体而言,本次考试不是很难,用心准备,考前认真听讲,考后多次练习,基本都能通过。

qinjuao的博客 2319

Mac上Office合法安装与激活全指南:2021/2024/M365区别解析

Office是微软办公套件的核心产品,其在macOS平台的部署逻辑与Windows截然不同——不依赖传统密钥激活,而是基于Microsoft账户与设备标识的云端绑定机制。理解这一原理,是解决‘无法验证开发者’‘打不开’‘功能受限’等常见问题的前提。Office 2021代表永久许可模型,Office 2024 LTSC面向企业离线场景,Microsoft 365则是持续订阅服务,三者在授权验证方式、更新策略与系统兼容性上存在本质差异。实际应用中,需结合macOS版本、芯片架构(Intel/Apple Sil

weixin_33491377的博客 1122

Dify与钉钉轻量级集成:打造企业内部AI助手

企业级聊天机器人开发已成为提升内部协同效率的关键技术。其核心原理在于通过API集成,将AI模型能力与即时通讯平台无缝连接,实现智能问答与自动化流程。从技术价值看,这种集成方案能够显著降低AI应用落地门槛,将前沿的AI能力快速转化为实际生产力。在应用场景上,它尤其适用于HR答疑、IT技术支持、产品知识库等高频内部服务场景。本文聚焦于Dify与钉钉的轻量级集成方案,通过Stream模式实现高效消息处理,并利用AI卡片支持流式输出,为企业构建体验自然的智能机器人提供了完整实践路径。该方案特别强调配置简化与部署便捷

weixin_27155667的博客 694

【扫地机器人测试】

本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。

xuhuaiyaun的博客 1370

cocos creator接入微信登陆sdk ios篇

cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id 在“info”标签栏的“LSApplicationQueriesSchemes“添加weixin 将SDK文件中...

凤小鹿的博客 6362

STGCN实战:从零构建PyTorch时空图卷积网络预测城市交通流

本文详细介绍了如何使用PyTorch从零构建时空图卷积网络(STGCN)进行城市交通流预测。通过将交通网络建模为图结构,并融合时间卷积与空间图卷积,STGCN能有效捕捉交通流的时空依赖性。文章提供了从数据预处理、核心模块(TimeBlock与STGCNBlock)搭建、模型训练到实战技巧的完整指南,帮助开发者快速掌握这一前沿的交通速度预测技术。

wasm7browser的博客 246

SAP前台处理:业务伙伴维护(客户主数据和供应商主数据)之基础视图 <BP>

这里主要讲解BP业务伙伴主数据中和财务相关的一些内容,包括基础视图数据,采购视图数据,销售视图数据,公司代码视图数据; S4统一了供应商和客户,从事务代码上:不再使用FD01和FK01进行维护,而使用事务代码BP统一维护;

SAP.David.Gao的博客 3455

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 数据库之Realm的简单使用:单表_增删改查_包含异步操作
下一篇: 屏幕适配:为同一界面建立多个layout分辨率布局文件
芒果蜜桃π
博客等级 码龄11年 112粉丝 99原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值