当前位置: 代码迷 >> Android >> Android 使用百度领航SDK 2.0小结
  详细解决方案

Android 使用百度领航SDK 2.0小结

热度:88   发布时间:2016-04-27 23:34:59.0
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

  相关解决方案