百度地图Util 简单的封装百度地图

之前做项目,地理位置选择界面用到百度地图,当时全部都写在了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());
            }
        }
    }
}
 



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要调用百度地图路线规划,你需要先注册百度地图开发者账号,并且创建一个应用,然后获取应用的AK(Access Key)。 接下来,你可以使用百度地图提供的Web API或者SDK进行路线规划。以下是一个使用百度地图Web API进行路线规划的示例代码: ```java import java.net.URLEncoder; import java.util.List; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class BaiduMapRoutePlanning { public static void main(String[] args) throws Exception { // 百度地图开发者AK String ak = "your_ak_here"; // 起点经纬度 String origin = "40.057406,116.296439"; // 终点经纬度 String destination = "39.908749,116.397491"; // 请求URL String url = "http://api.map.baidu.com/direction/v2/driving?origin=" + URLEncoder.encode(origin, "UTF-8") + "&destination=" + URLEncoder.encode(destination, "UTF-8") + "&ak=" + ak; // 创建HttpClient CloseableHttpClient httpClient = HttpClients.createDefault(); try { // 创建HttpGet HttpGet httpGet = new HttpGet(url); // 发送请求并获得响应 CloseableHttpResponse response = httpClient.execute(httpGet); try { // 解析响应内容 String content = EntityUtils.toString(response.getEntity()); System.out.println(content); } finally { response.close(); } } finally { httpClient.close(); } } } ``` 上面的代码中,我们使用了Apache HttpClient库来发送HTTP请求,并且将返回的JSON格式数据打印到控制台上。你需要将`your_ak_here`替换成你自己的百度地图开发者AK。 如果你想使用百度地图SDK进行路线规划,可以参考百度地图官方文档中的示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值