概述
之前做项目,地理位置选择界面用到百度地图,当时全部都写在了Activity 导致整个Activity代码看起来特别乱 于是决定对百度地图这块做提取
好了废话不多说 直接上代码 有不足之处请指教
现在只初步封装了 定位 poi 逆地理解析
import android.content.Context; 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; import com.baidu.mapapi.search.geocode.GeoCodeResult; import com.baidu.mapapi.search.geocode.GeoCoder; import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener; import com.baidu.mapapi.search.geocode.ReverseGeoCodeOption; import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult; import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener; import com.baidu.mapapi.search.poi.PoiCitySearchOption; import com.baidu.mapapi.search.poi.PoiDetailResult; import com.baidu.mapapi.search.poi.PoiIndoorResult; import com.baidu.mapapi.search.poi.PoiResult; import com.baidu.mapapi.search.poi.PoiSearch; import java.util.List; /** * Created by lybon 2017//2. * <p> * 对百度地图封装 */ public class LocationUtil { private static MyLocationListenner myListener = new MyLocationListenner(); private static LocationClient mLocClient; protected static currentAddress mCurrentAddress;//定位回调监听 protected static poiSeach mPoi; //poi检索回调监听 protected static geoCode mGeoCode;//反地理编码查询 protected static boolean isOnes = true;//是否之调用一次 private static GeoCoder geoCoder; public interface currentAddress { void getAddress(BDLocation location); } public interface poiSeach { void getPoi(List<PoiInfo> poiInfos); } public interface geoCode { void getGeoCode(List<PoiInfo> poiInfos); } /** * 定位模块调用 * * @param mCurrentAddress2 */ public static void setCurrentAddress(currentAddress mCurrentAddress2, Context mContext, boolean one) { mCurrentAddress = mCurrentAddress2; getLocation(mContext); isOnes = one; } /** * POI检索模块 * * @param mPoiSeach * @param city * @param code */ public static void setPoi(poiSeach mPoiSeach, String city, String code) { mPoi = mPoiSeach; poiSeach(city, code); } /** * 逆地理编码 * * @param mGeo * @param mLatLng */ public static void setGeoCode(geoCode mGeo, LatLng mLatLng) { mGeoCode = mGeo; } /** * 定位模块 */ public static void getLocation(Context mContext) { // 定位初始化 if (mLocClient == null) { mLocClient = new LocationClient(mContext); mLocClient.registerLocationListener(myListener); // 定位选项 LocationClientOption option = new LocationClientOption(); /** * coorType - 取值有3个: 返回国测局经纬度坐标系:gcj02 返回百度墨卡托坐标系 :bd09 返回百度经纬度坐标系 * :bd09ll */ option.setCoorType("bd09ll"); // 设置是否需要地址信息,默认为无地址 option.setIsNeedAddress(true); // 设置是否需要返回位置语义化信息,可以在BDLocation.getLocationDescribe()中得到数据,ex:"在天安门附近", // 可以用作地址信息的补充 option.setIsNeedLocationDescribe(true); // 设置是否需要返回位置POI信息,可以在BDLocation.getPoiList()中得到数据 option.setIsNeedLocationPoiList(true); /** * 设置定位模式 Battery_Saving 低功耗模式 Device_Sensors 仅设备(Gps)模式 Hight_Accuracy * 高精度模式 */ option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 设置是否打开gps进行定位 option.setOpenGps(true); // 设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效 option.setScanSpan(1000); // 设置 LocationClientOption mLocClient.setLocOption(option); } mLocClient.start(); mLocClient.requestLocation(); } /** * 重写定位监听 */ public static class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // TODO Auto-generated method stub if (location != null) { if (location.getCity() != null && !location.getCity().equals("")) { if (isOnes == true) { mLocClient.stop(); } mCurrentAddress.getAddress(location); } else { Log.v("zhaojihao", location.toString() + "||" + location.getLongitude()); } } else { Log.e("zhaojihao", "失败"); } } } /****************** 定位模块结束 ************************/ /** * POI检索模块 * @param city 检索城市 * @param code 检索关键字 */ public static void poiSeach(String city, String code) { // 创建PoiSearch实例 PoiSearch poiSearch = PoiSearch.newInstance(); // 城市内检索 PoiCitySearchOption poiCitySearchOption = new PoiCitySearchOption(); // 关键字 poiCitySearchOption.keyword(code); // 城市 poiCitySearchOption.city(city); // 设置每页容量,默认为每页10条 poiCitySearchOption.pageCapacity(10); // 分页编号 poiCitySearchOption.pageNum(1); poiSearch.searchInCity(poiCitySearchOption); // 设置poi检索监听者 poiSearch.setOnGetPoiSearchResultListener(new getPoiSearchResult()); } public static class getPoiSearchResult implements OnGetPoiSearchResultListener{ // poi 查询结果回调 @Override public void onGetPoiResult(PoiResult poiResult) { try { mPoi.getPoi(poiResult.getAllPoi()); } catch (Exception e) { mPoi.getPoi(null); } } // poi 详情查询结果回调 @Override public void onGetPoiDetailResult( PoiDetailResult poiDetailResult) { } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { } } /****************** POI检索模块结束 ************************/ /** * 逆地理编码解析 * * @param latLng */ public static void geoCode(LatLng latLng) { // 发起反地理编码请求(经纬度->地址信息) ReverseGeoCodeOption reverseGeoCodeOption = new ReverseGeoCodeOption(); // 设置反地理编码位置坐标 reverseGeoCodeOption.location(latLng); // 创建GeoCoder实例对象 if (geoCoder == null) { geoCoder = GeoCoder.newInstance(); } geoCoder.reverseGeoCode(reverseGeoCodeOption); // 设置查询结果监听者 geoCoder.setOnGetGeoCodeResultListener(new MyOnGetGeoCodeResultListener()); } public static class MyOnGetGeoCodeResultListener implements OnGetGeoCoderResultListener { @Override public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) { } @Override public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) { try { if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) { mGeoCode.getGeoCode(null); return; } mGeoCode.getGeoCode(reverseGeoCodeResult.getPoiList()); } catch (Exception e) { Log.d("Exception", e.toString()); } } } }
最后
以上就是自觉魔镜为你收集整理的百度地图Util 简单的封装百度地图的全部内容,希望文章能够帮你解决百度地图Util 简单的封装百度地图所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复