实现起始点输入的路线规划

要实现输入起始点的路线规划,需要两个输入框,可以将两个输入框设置在和地图同一个Activity中,也可以新建一个Activity,来实现地址的输入,然后通过页面之间的跳转来传值。

起始点地址输入InputSEAddressActivity

新建一个Activity,代码如下:

public class InputSEAddressActivity extends AppCompatActivity {

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

}

这个不是完整代码,只是第一步。

新建一个layout布局文件

新建布局文件activity_input_address.xml,并且对控件布局进行设计。注意整个布局文件应该设置为RelativeLayout代码如下:

android:gravity="center_vertical"

android:layout_width="match_parent"

android:layout_height="40dp">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="起点:"/>

android:id="@+id/Start_Edt_Address_school"

android:layout_weight="2"

android:layout_width="0dp"

android:hint="地址"

android:layout_height="match_parent" />

android:layout_marginTop="40dp"

android:gravity="center_vertical"

android:layout_width="match_parent"

android:layout_height="40dp">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="终点:"/>

android:id="@+id/End_Edt_Address_school"

android:layout_weight="2"

android:layout_width="0dp"

android:hint="地址"

android:layout_height="match_parent" />

android:layout_marginTop="80dp"

android:gravity="center_vertical"

android:layout_width="match_parent"

android:layout_height="40dp">

android:id="@+id/btn_drive_school"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:text="骑行规划" />

android:id="@+id/btn_bus_school"

android:text="公交规划"

android:layout_weight="1"

android:layout_width="0dp"

android:layout_height="match_parent" />

上面代码直接复制粘贴,在activity_input_address.xml布局文件中添加,如下:

效果如下:

将布局文件和Activity关联。直接在onCreate中添加

setContentView(R.layout.activity_input_address);

在AndroidManifest中声明这个Activity,否则将闪退。

实现页面之间值的传递

MainActivity跳转到InputSEAddressActivity

对MainActivity中作如下修改:

找到button和onClick方法:

对onClick中的but_RoutePlan事件作如下修改:

case R.id.but_RoutrPlan:{

Intent intent = new Intent(MainActivity.this,InputSEAddressActivity.class);

startActivityForResult(intent,0x11);

break;

}

意思就是从MainActivity跳转到InputSEAddressActivity,但是InputSEAddressActivity会回传一个值。或者回传一个bundle。

break一定要添加,不然可能出大问题.

核心代码

MainActivity

对MainActivity中的StartRoute作如下修改,并且添加一个onActivityResult方法:

//开始规划,这里实现多种不同的路线规划方式。

private void StarRoute(int id,ArrayList list) {

SDKInitializer.initialize(getApplicationContext());

//经纬度规划路线和动态输入规划路线二选一

// 设置起、终点信息 动态输入规划路线

PlanNode stNode = PlanNode.withCityNameAndPlaceName(list.get(0).toString(), list.get(1).toString());

PlanNode enNode = PlanNode.withCityNameAndPlaceName(list.get(2).toString(), list.get(3).toString());

switch (id){

case 1:

mSearch.walkingSearch((new WalkingRoutePlanOption())

.from(stNode)

.to(enNode));

break;

case 2:

if(list.get(0).toString() == list.get(2).toString()){

mSearch.transitSearch((new TransitRoutePlanOption()).from(stNode).to(enNode));

}else{

mSearch.masstransitSearch((new MassTransitRoutePlanOption()).from(stNode).to(enNode));

}

break;

default:break;

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if(requestCode == 0x11){

ArrayList address = data.getCharSequenceArrayListExtra("address");

StarRoute(resultCode,address);

}

}

case 后面的 1 和 2 是从InputSEAddressActivity 回传的resultCode。

InputSEAddressActivity

InputSEAddressActivity中的完整代码如下:

public class InputSEAddressActivity extends AppCompatActivity implements View.OnClickListener{

private Button btnDrive, btnBus;

private EditText start_edt_city, start_edt_address, end_edt_city, end_edt_address;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_input_address);

button();

}

private void button() {

btnDrive = findViewById(R.id.btn_drive_school);

btnBus = findViewById(R.id.btn_bus_school);

// start_edt_city = findViewById(R.id.Start_Edt_City_school);

start_edt_address = findViewById(R.id.Start_Edt_Address_school);

// end_edt_city = findViewById(R.id.End_Edt_City_school);

end_edt_address = findViewById(R.id.End_Edt_Address_school);

//按钮事件处理

btnDrive.setOnClickListener(this);

btnBus.setOnClickListener(this);

}

@Override

public void onClick(View v) {

SDKInitializer.initialize(getApplicationContext());

Intent intentaddress=getIntent();

String startCity = "上海";

String startAddress = start_edt_address.getText().toString();

String endCity = "上海";

String endAddress = end_edt_address.getText().toString();

ArrayList addressList = new ArrayList<>();

addressList.add(startCity);

addressList.add(startAddress);

addressList.add(endCity);

addressList.add(endAddress);

//先判断起始点地址框输入是否为空

if (startCity.isEmpty() || startAddress.isEmpty() || endCity.isEmpty() || endAddress.isEmpty()) {

Toast.makeText(this, "起点和终点不能为空", Toast.LENGTH_SHORT).show();

} else {

Intent intent = new Intent();//新建意图

intent.putStringArrayListExtra("address", addressList);

switch (v.getId()) {

case R.id.btn_drive_school:

setResult(1, intent); //1是resultCode,相当于回传给MainActivity的暗号

break; //用来将意图区分开,以实现不同的路线规划

case R.id.btn_bus_school:

setResult(2, intent);

break;

}

finish();

}

}

}

到此就可以实现起始点地址输入的路线导航。

运行之后效果:

测试的路线从上海博物馆到上海大剧院,如图:

看似很完美,其实存在挺早的问题。仅到目前还不能实现模糊搜索,而且精度不高。就是说一些比较小的地点,或者地址输错一个字,都找不到结果。并且不能在输入时根据关键词搜索地点,然后用列表展示出来。

这些问题将在后面的POI搜索中得到初步解决。

为了不让一篇文章内容太多,所以将骑行和驾车规划放到下一篇文章。

——————————————————————————

版权所有,转载请标明出处。 觉得有用请点个赞。

android studio百度地图教程,Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(4) 路线规划之起始点地址输入实现规划...相关推荐

  1. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划

    2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划 开发前配置,显示基本地图,实时定位等查看之前代码,此博客紧接上一博客:https://blog.csdn.ne ...

  2. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(6) POI检索, 根据地址输入提示检索 Sug

    POI检索, 根据地址输入提示检索 Sug 参考百度地图官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/sug ...

  3. 【02】2022.11最新超详细Vuforia图片识别教程

    [02]2022.11最新超详细Vuforia图片识别教程 文章目录 [02]2022.11最新超详细Vuforia图片识别教程 1.Vuforia环境搭建 2.License Key获取及注册 3. ...

  4. 超详细的Android百度地图开发:在APP上定位并显示出来

    超详细的Android百度地图开发:在APP上定位并显示出来 一 写在前面 二 注册百度开发者账户.申请API KEY 三.代码实现 四.问题 五.总结 一 写在前面 由于项目所需,我需要在手机APP ...

  5. fl如何保存再次打开_fl studio 20专业教程|fl studio专业新手教程教程(详细使用保存工程)...

    fl studio 20专业教程|fl studio专业新手教程教程(详细使用保存工程),也就是众所熟知的水果软件,全能音乐制作环境或数字音频工作站(DAW).FL Studio可以编曲.剪辑.录音. ...

  6. Docker02 狂神Docker视频学习笔记 :【狂神说Java 哔哩哔哩】Docker最新超详细版教程通俗易懂

    目录 0. 视频源 0. 学习网址 基础篇 1. Docker概述 1.1 Docker为什么出现? 1.2 Docker历史 1.3 Docker能干什么 2. Docker安装 2.1 Docke ...

  7. Docker最新超详细教程——基本操作

    Docker最新超详细教程--基本操作 一.镜像操作 镜像名称 镜像命令 案例一:拉取.查看镜像 案例二:保存.导入镜像 二.容器操作 容器相关命令 容器三个状态 暂停与停止有什么差别? 案例一:创建 ...

  8. Docker最新超详细教程——安装与部署

    Docker最新超详细教程--安装与部署 安装Docker CentOS安装Docker 1. 卸载(可选) 2. 安装yum工具 3. 更新本地镜像源 4. 安装docker 5. 注意事项 关闭防 ...

  9. win7中Android开发环境搭建超详细(百度)

    Android系统如火如荼,Android软件开发也相当流行,这里介绍如何一步步完成Android软件开发环境的搭建. 工具/原料 能联网的计算机 Java环境搭建 1 Android软建开发用的是J ...

最新文章

  1. IPv6 — 网际协议第 6 版
  2. 【转】解决多文件编译中连接错误 multiple definition of*****
  3. java中b的平方表示_第七届蓝桥杯Java B——四平方和
  4. 数据分析菜鸟怒怼面试官却被打脸,只会SQL也敢来面试?
  5. java阿里系学习经历的小小领悟
  6. java 接口的声明和实现 总结_java知识总结(三):函数式接口
  7. matplotlib text 文字处理
  8. iOS开发之控制器的创建
  9. Cmder–Windows下命令行利器
  10. matplotlib 28原则
  11. dcdc模块降额设计_人工智能产品设计—LDO使用的技术总结篇
  12. 快速确定dll 是x86还是x64
  13. gentoo mysql_Gentoo 安装 Mysql
  14. 项目文档的流程图,ER图,用例图
  15. how to define the RASIC in a team
  16. Convert() 转换时 报错:输入字符串的格式不正确
  17. MP4测试视频URL地址分享,亲测有效。可用于测试HTML5播放器效果。
  18. 程序员修炼之道读后感1
  19. 6年拉力工作经验,学了阿里P8级架构师的7+1+1落地项目,跳槽阿里年薪直接40W+
  20. PHP中curl使用案例(四)-- 从ftp服务器下载文件到本地

热门文章

  1. pandas 数据结构--DataFrame
  2. 服务器托管的作用,有哪些好处?
  3. Qt Creator 添加基于 JSON 的向导
  4. 使用cmake构建工程
  5. html 里面的 role 属性是什么意思
  6. React动态效果——animate.css
  7. C语言电话号码判断合法性
  8. 人工智能导论(7)——人工神经网络(Machine Learning)
  9. 计算机视觉sci需要什么水平论文,计算机视觉博士一般几篇论文_林达华博士_林达华视觉...
  10. python 多图绘制