Android 使用百度导航SDK 2.0小结

效果:

使用百度导航SDK,首先需要获取的信息有:

1.起始位置的经纬度,地名

2.终点的经纬度,地名

3.起始点经纬度所使用的坐标系类型(CoordinateType )

参数如下:

private void routeplanToNavi(CoordinateType coType, double startLatitude,
            double startLongitude, String startName, double endLatitude,
            double endLongitude, String endName)
{
... ...
}

思路:

1.起始点使用当前位置,由定位SDK获取当前位置(使用的坐标系是bd09ll);
2.目的地终点,根据用户输入关键字,使用PoiNearbySearchOption结合PoiCitySearchOption转成坐标点(坐标系是bd09ll);
3.将以上bd09ll坐标系转成导航2.0支持的BD09_MC,GCJ02,WGS84三者之一。

实现:

Poi搜索部分:

设置两个EditText:

textCity 目的地所属城市(为空则默认为当前城市)

textWhere 目的地

根据用户的关键字,判断进行PoiNearbySearchOption还是PoiCitySearchOption

public void startSearchPlace(String where, LatLng centerLatLng,
            boolean isNear) {
        if (where != null && where.trim().length() > 0) {
            if (-1 == NetworkUtil.getNetworkType(getApplicationContext())) {
                NetworkUtil.noNetworkHint(getApplicationContext());
            } else {
                String textCity = etHistoryCity.getText().toString();
                boolean isInputCity = textCity != null
                        && textCity.trim().length() > 0;
                if (isNear) {
                    // 周边搜索
                    Toast.makeText(
                            getApplicationContext(),
                            getResources().getString(R.string.poi_search_near)
                                    + where, Toast.LENGTH_SHORT).show();

                    PoiNearbySearchOption poiOption = new PoiNearbySearchOption();
                    poiOption.keyword(where);
                    poiOption.location(centerLatLng);
                    poiOption.radius(15 * 1000 * 1000); // 检索半径,单位:m
                    poiOption.sortType(PoiSortType.distance_from_near_to_far); // 按距离排序
                    // poiOption.sortType(PoiSortType.comprehensive); // 按综合排序
                    poiOption.pageNum(0); // 分页编号
                    poiOption.pageCapacity(10); // 设置每页容量,默认为每页10条
                    try {
                        mPoiSearch.searchNearby(poiOption);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    if (!isInputCity) {
                        // 周边搜索
                        Toast.makeText(
                                getApplicationContext(),
                                getResources().getString(
                                        R.string.poi_search_near)
                                        + where, Toast.LENGTH_SHORT).show();

                        PoiNearbySearchOption poiOption = new PoiNearbySearchOption();
                        poiOption.keyword(where);
                        poiOption.location(centerLatLng);
                        poiOption.radius(15 * 1000 * 1000); // 检索半径,单位:m
                        poiOption
                                .sortType(PoiSortType.distance_from_near_to_far); // 按距离排序
                        // poiOption.sortType(PoiSortType.comprehensive); //
                        // 按综合排序
                        poiOption.pageNum(0); // 分页编号
                        poiOption.pageCapacity(10); // 设置每页容量,默认为每页10条
                        try {
                            mPoiSearch.searchNearby(poiOption);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        // 全国搜索
                        Toast.makeText(
                                getApplicationContext(),
                                getResources().getString(R.string.poi_in_city)
                                        + textCity
                                        + getResources().getString(
                                                R.string.poi_search) + where,
                                Toast.LENGTH_SHORT).show();

                        PoiCitySearchOption poiOption = new PoiCitySearchOption();
                        poiOption.city(textCity);
                        poiOption.keyword(where);
                        poiOption.pageNum(0);
                        poiOption.pageCapacity(10);
                        mPoiSearch.searchInCity(poiOption);
                    }

                    // 存储搜索历史到数据库,周边不需要
                    int existId = naviDb.getNaviIdByKey(where);
                    if (existId != -1) {
                        naviDb.deleteNaviHistoryById(existId);
                    }
                    NaviHistory naviHistory = new NaviHistory(where, textCity);
                    naviDb.addNaviHistory(naviHistory);
                    naviHistoryAdapter.notifyDataSetChanged();
                }
            }
        }
    }

坐标系转化:

/**
 * startLatitude,startLongitude为bd09ll
 * bdLocStartAfter.getLongitude()和bdLocStartAfter.getLatitude()即为转化过的坐标系
 * BDLocation.BDLOCATION_BD09LL_TO_GCJ02表示从bd09ll转成gcj02坐标系
 */
BDLocation bdLocStartBefore = new BDLocation();
        bdLocStartBefore.setLatitude(startLatitude);
        bdLocStartBefore.setLongitude(startLongitude);
        BDLocation bdLocStartAfter = LocationClient.getBDLocationInCoorType(
                bdLocStartBefore, BDLocation.BDLOCATION_BD09LL_TO_GCJ02);

周边和收藏

在导航的基础上,实现了周边搜索和收藏的功能:

实现方式:

1.周边使用PoiNearSearch,获取经纬度;

2.收藏使用地图选点,然后存储经纬度;

3.后面就和导航一致了。

版权声明:本文原创,转载请注明出处:http://blog.csdn.net/zhoumushui

时间: 2024-08-09 18:47:58

Android 使用百度导航SDK 2.0小结的相关文章

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易,且用且珍惜. 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一,手动导入,先将从官网下载的离线包解压,把vmp文件夹拷入SD卡根目录下的BaiduMapSDK文件夹内.好吧,我表示不能接受,无视了. 第二,接口下载方法如下:mOffline.start(cityid);还比较靠谱,就是没详

Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍

转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易.且用且珍惜. 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一.手动导入,先将从官网下载的离线包解压,把vmp目录拷入SD卡根目录下的BaiduMapSDK目录内. 好吧,我表示不能接受,无视了. 第二,接口下载方法例如以下:mOffline.start(cityid);还比較靠谱,就是

Android使用百度定位SDK 方法及错误处理

之前我的项目中的位置定位使用的是基站方法,使用的Google提供的API,但是前天中午突然就不返回数据了,到网上搜了一下才知道,Google的接 口不提供服务了,基于时间紧迫用了百度现有的SDK,但是在使用过程中第一次获取位置总是空值,经过多次实验终于成功.当然,如果需要精确的位置,你可以 再加上位置偏移算法.我的应用对这个要求不高,就没做,一搜一大把,就不多说了. 下面这段话来自 百度地图API>定位SDK 百度地图定位SDK免费对外开放,无需申请key.在使用百度定位SDK前,希望先阅读百度

Android使用百度LBS SDK(二)

上篇:Android使用百度LBS SDK(实现了百度地图的基本使用,记录轨迹,优化轨迹平滑度,轨迹查看与截图分享.) 今天再总结下测距和测速的使用: 计算轨迹起始点直线距离和路线距离 代码: // 直线距离 double linearDistance = DistanceUtil.getDistance(llStart, llEnd); // 轨迹距离 double routeDistance = 0.0; for (int i = 0; i < points.size() - 1; i++)

Android 百度地图 SDK v3.0.0 (一)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SDK,当前的版本:Android SDK v3.0.0 . 虽然百度地图网上相关代码比较多,大多可能都是比较旧的版本,且百度地图API的改动感觉也比较大,所以再此跟大家分享一下一天的劳动成功. 下面简单展示下,博客中会介绍的功能: 1.功能介绍 a.首先肯定是导入地图,然后就是地图模式的一些切换,普通

xamarin.android 绑定百度地图SDK遇到的问题

在 xamarin.android 绑定项目中,绑定 百度地图的LBS地图SDK,参考 https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-a-jar/ 设置好后,编译,  然后提示错误,其中一个错误 是 意思就是说转换 出来的CS 代码中,有重复的 类型. 理论上来说,转换的 CS 代码 是不应该出现重复代码的,有重复,意味这 jar有重复代码. 然后查看 百度地

Android使用百度LBS SDK(一)显示地图MapView

类似百度应用引擎,使用百度的LBS服务,首先我们在百度开放服务平台创建一个应用,如下图: 进入应用详情,然后点击"LBS服务",设置应用: 数字签名的获取方式,可以在Eclipse(ADT 22)中查看,Window->Preferences->Android->Build,SHA1 fingerprint就是我们需要的: Android SDK安全码组成:数字签名+;+包名. 接着下载LBS Android SDK,然后按照百度官方文档的方法进行操作: 第一步:在工

Android 导入百度地图SDK 详细步骤

今天交大家咋么来接入百度地图的SDK,步骤其实和百度官网上的开发指南一样,写下来做做总结. 1. 注册百度开发者账号,直接到官网注册就行,如果没有注册,你在获取秘钥的时候系统会提醒你注册.百度的LBS的首页网址是: http://developer.baidu.com/map/index.php?title=%E9%A6%96%E9%A1%B5 2. 有了百度开发者账户后就可以去申请要开发的APP,由于百度SDK需要和App绑定,在创建APP的时候需要提供android秘钥和package包名,