因为项目需要,最近研究了下百度地图的SDK,简单记录一些点。
1.下载SDK及demo
下载地址:http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
2.申请key
教程地址:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
key需要用到app的包名和签名证书的SHA1值
如果需要使用 周边雷达 功能,需要再注册一个,否则无法使用
周边雷达注册地址:http://lbsyun.baidu.com/index.php?title=radar
import android.content.Context; import android.os.Handler; import android.util.Log; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.radar.RadarNearbyInfo; import com.baidu.mapapi.radar.RadarNearbyResult; import com.baidu.mapapi.radar.RadarNearbySearchOption; import com.baidu.mapapi.radar.RadarSearchError; import com.baidu.mapapi.radar.RadarSearchListener; import com.baidu.mapapi.radar.RadarSearchManager; import com.baidu.mapapi.radar.RadarUploadInfo; public class BDRadarTest { private static final String TAG = BDRadarTest.class.getSimpleName(); private static RadarSearchManager mRSManager = null; private static LocationClient mLocClient = null; private static LatLng mLatLng = null; private static Handler mHandler = null; private static Context mContext = null; public static void init(Context context) { mContext = context; mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: goStartRadar(); break; case 1: goGetLocation(); break; case 2: goUploadInfo(mLatLng); break; case 3: goRadar(mLatLng); break; case 4: goClear(); break; case 5: goDestory(); break; default: break; } } }; } private static RadarSearchListener mRSListener = new RadarSearchListener() { @Override public void onGetUploadState(RadarSearchError err) { Log.i(TAG, "UploadState"); if (err == RadarSearchError.RADAR_NO_ERROR) { Log.i(TAG, "UploadState OK"); mHandler.sendEmptyMessage(3); } else { Log.i(TAG, "UploadState err:" + err); mHandler.sendEmptyMessage(4); } } @Override public void onGetNearbyInfoList(RadarNearbyResult result, RadarSearchError err) { Log.i(TAG, "NearbyInfoList"); if (err == RadarSearchError.RADAR_NO_ERROR) { Log.i(TAG, "NearbyInfoList OK"); // totalNum:3 // pageIndex:0 // pageNum:1 // infoList.size:3 // info userid:123 // info distance:814 // info comments:1 // info timeStamp:Mon Feb 15 18:24:49 格林尼治标准时间+0800 2016 Log.i(TAG, "totalNum:" + result.totalNum); // 总结果个数 Log.i(TAG, "pageIndex:" + result.pageIndex); // 页码 Log.i(TAG, "pageNum:" + result.pageNum); // 总页数 Log.i(TAG, "infoList.size:" + result.infoList.size()); for (int i = 0; i < result.infoList.size(); i++) { RadarNearbyInfo info = result.infoList.get(i); Log.i(TAG, "info userid:" + info.userID); // userid Log.i(TAG, "info distance:" + info.distance); // 距离 Log.i(TAG, "info comments:" + info.comments); // 备注 Log.i(TAG, "info timeStamp:" + info.timeStamp); // 上传位置时的时间戳 } } else { Log.i(TAG, "NearbyInfoList err:" + err); } mHandler.sendEmptyMessage(4); } @Override public void onGetClearInfoState(RadarSearchError err) { Log.i(TAG, "ClearInfoState"); if (err == RadarSearchError.RADAR_NO_ERROR) { Log.i(TAG, "ClearInfoState OK"); } else { Log.i(TAG, "ClearInfoState err:" + err); } mHandler.sendEmptyMessage(5); } }; public static void startRadar() { Log.i(TAG, "startRadar"); mHandler.sendEmptyMessage(0); } private static void goStartRadar() { Log.i(TAG, "goStartRadar"); // 获取本地位置--上传位置信息--等待回调--回调成功--开始查询--等待回调--回调中打印结果 mRSManager = RadarSearchManager.getInstance(); mRSManager.setUserID("test01"); mRSManager.addNearbyInfoListener(mRSListener); // 定位 mHandler.sendEmptyMessage(1); } private static void goGetLocation() { Log.i(TAG, "goGetLocation"); LocationClientOption locOption = new LocationClientOption(); locOption.setIgnoreKillProcess(false); locOption.setEnableSimulateGps(true); locOption.setCoorType("bd09ll"); mLocClient = new LocationClient(mContext); mLocClient.setLocOption(locOption); mLocClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { Log.i(TAG, "onReceiveLocation"); mLatLng = new LatLng(location.getLatitude(), location.getLongitude()); mHandler.sendEmptyMessage(2); // 定位成功后销毁 mLocClient.stop(); } }); mLocClient.start(); } private static void goUploadInfo(LatLng ll) { Log.i(TAG, "goUploadInfo"); RadarUploadInfo info = new RadarUploadInfo(); info.comments = "m"; info.pt = ll; mRSManager.uploadInfoRequest(info); } private static void goRadar(LatLng ll) { Log.i(TAG, "goRadar"); RadarNearbySearchOption option = new RadarNearbySearchOption(); option.centerPt(ll); // 中心点 option.pageCapacity(10); // 每页包含的结果数 option.pageNum(0); // 当前需要查询的页码index,从0开始 option.radius(1000); // 搜索半径 mRSManager.nearbyInfoRequest(option); } private static void goClear() { Log.i(TAG, "goClear"); mRSManager.clearUserInfo(); } private static void goDestory() { Log.i(TAG, "goDestory"); mRSManager.removeNearbyInfoListener(mRSListener); mRSManager.destroy(); } }
// 初始化SDK SDKInitializer.initialize(getApplicationContext()); // 初始化handler BDRadarTest.init(context); // 开始 BDRadarTest.startRadar();
import android.content.Context; import android.os.Handler; import android.util.Log; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.core.PoiInfo; import com.baidu.mapapi.search.core.SearchResult.ERRORNO; import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener; import com.baidu.mapapi.search.poi.PoiDetailResult; import com.baidu.mapapi.search.poi.PoiNearbySearchOption; import com.baidu.mapapi.search.poi.PoiResult; import com.baidu.mapapi.search.poi.PoiSearch; import com.baidu.mapapi.search.poi.PoiSortType; public class BDPoiTest { private static final String TAG = BDPoiTest.class.getSimpleName(); private static PoiSearch mPoiSManager = null; private static LocationClient mLocClient = null; private static LatLng mLatLng = null; private static Handler mHandler = null; private static Context mContext = null; public static void init(Context context) { mContext = context; mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: goStartPoi(); break; case 1: goGetLocation(); break; case 2: goPoiSearch(mLatLng); break; case 3: goDestory(); break; default: break; } } }; } private static OnGetPoiSearchResultListener mPoiResultListener = new OnGetPoiSearchResultListener() { @Override public void onGetPoiResult(PoiResult result) { if (result.error == ERRORNO.NO_ERROR) { Log.i(TAG, "GetPoiResult OK"); // totalNum:45 // totalPageNum:5 // pageIndex:0 // pageCapacity:10 // isHasAddrInfo:false // poi.size:10 // info address:北京市东城区王府井大街277号(近好友世界商场) // info city:北京市 // info name:酷时代游艺世界 // info phoneNum:(010)65225696 // info postCode:null // info uid:34059f97e013925471455bce // info hasCaterDetails:false // info isPano:true // info location:latitude: 39.91824597245212, longitude: 116.41649542740966 // info type:POINT Log.i(TAG, "totalNum:" + result.getTotalPoiNum()); // 总结果个数 Log.i(TAG, "totalPageNum:" + result.getTotalPageNum()); // 总页数 Log.i(TAG, "pageIndex:" + result.getCurrentPageNum()); // 页码 Log.i(TAG, "pageCapacity:" + result.getCurrentPageCapacity()); // 本页的结果数,可能小于本页可显示的结果数 Log.i(TAG, "isHasAddrInfo:" + result.isHasAddrInfo()); Log.i(TAG, "poi.size:" + result.getAllPoi().size()); if (result.isHasAddrInfo()) { // 如果为false,则getAllAddr为空 Log.i(TAG, "addr.size:" + result.getAllAddr().size()); } for (int i = 0; i < result.getAllPoi().size(); i++) { PoiInfo info = result.getAllPoi().get(i); Log.i(TAG, "info address:" + info.address); // 地址 Log.i(TAG, "info city:" + info.city); // 城市 Log.i(TAG, "info name:" + info.name); // 名称 Log.i(TAG, "info phoneNum:" + info.phoneNum); // 电话 Log.i(TAG, "info postCode:" + info.postCode); // 邮编 Log.i(TAG, "info uid:" + info.uid); // uid,用于后面查询DetailResult Log.i(TAG, "info hasCaterDetails:" + info.hasCaterDetails); // 是否有详细信息 Log.i(TAG, "info isPano:" + info.isPano); // 是否有全景 Log.i(TAG, "info location:" + info.location); // 经纬度 Log.i(TAG, "info type:" + info.type); // 类型 } } else { Log.i(TAG, "GetPoiResult err:" + result.error); } mHandler.sendEmptyMessage(3); } @Override public void onGetPoiDetailResult(PoiDetailResult result) { mHandler.sendEmptyMessage(3); } }; public static void startPoi() { Log.i(TAG, "startPoi"); mHandler.sendEmptyMessage(0); } private static void goStartPoi() { Log.i(TAG, "goStartPoi"); // 获取本地位置--上传位置信息--等待回调--回调成功--开始查询--等待回调--回调中打印结果 mPoiSManager = PoiSearch.newInstance(); mPoiSManager.setOnGetPoiSearchResultListener(mPoiResultListener); // 定位 mHandler.sendEmptyMessage(1); } private static void goGetLocation() { Log.i(TAG, "goGetLocation"); LocationClientOption locOption = new LocationClientOption(); locOption.setIgnoreKillProcess(false); locOption.setEnableSimulateGps(true); locOption.setCoorType("bd09ll"); mLocClient = new LocationClient(mContext); mLocClient.setLocOption(locOption); mLocClient.registerLocationListener(new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { Log.i(TAG, "onReceiveLocation"); mLatLng = new LatLng(location.getLatitude(), location.getLongitude()); mHandler.sendEmptyMessage(2); // 定位成功后销毁 mLocClient.stop(); } }); mLocClient.start(); } private static void goPoiSearch(LatLng ll) { Log.i(TAG, "goPoiSearch"); PoiNearbySearchOption option = new PoiNearbySearchOption(); option.location(ll); option.radius(3000); option.sortType(PoiSortType.distance_from_near_to_far); option.keyword("棋牌室"); option.pageCapacity(10); // 每页最多含多少条结果 option.pageNum(0); // 查询的页码 mPoiSManager.searchNearby(option); } private static void goDestory() { Log.i(TAG, "goDestory"); mPoiSManager.destroy(); } }
调用方式与之前相似。