百度地图学习笔记

2017-11-05  本文已影响25人  Owen270

参考链接1:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/coorinfo

参考链接2:http://lbsyun.baidu.com/index.php?title=uri/api/android

1.百度地图之定位,反地址搜索,poi地址搜索(1.从近到远 2.城市内部关键词搜索设置),行政区域搜索(按城市名称)

1.1.poi从近到远地址搜索效果图

图片.png

1.2.poi城市内部关键词搜索设置

图片.png

1.3.行政区域搜索(按城市名称)

图片.png
具体代码如下:

public class MySelectAddress extends Activity implements View.OnClickListener,MyIndicator.OnIndiacatorClickListener,OnGetPoiSearchResultListener,MyOrientationListener.OnOrientationListener,OnGetGeoCoderResultListener,OnGetDistricSearchResultListener{
    @BindView(R.id.mapview)
    MapView mMapView;
    @BindView(R.id.recyclerview_map)
    RecyclerView mRecyclerView;
    @BindView(R.id.indicator_map)
    MyIndicator myIndicator;
    @BindView(R.id.recyclerview_search)
    RecyclerView mRecycler_Search;
    @BindView(R.id.edit_city)
    EditText mEdit_City;
    @BindView(R.id.tv_city)
    TextView mTv_City;
    @BindView(R.id.tv_cancle)
    TextView mTv_cancle;
    @BindView(R.id.image_ddz)
    ImageView mImage_Center;
    @BindView(R.id.view_bg)
    LinearLayout view_bg;
    @BindView(R.id.image_clean)
    ImageView mClean;
    @BindView(R.id.linear_search_city)
    LinearLayout mLinear_Search;
    @BindView(R.id.image_location)
    ImageView image_location;

    /**
     * 城市
     */
    private LinearLayoutManager mLinearLayoutManager;
    @BindView(R.id.city_layout)
    RelativeLayout city_layout;
    @BindView(R.id.recycler_city)
    RecyclerView recycler_city;
    private String[] mLinearList = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
            "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
    @BindView(R.id.linear_check)
    LinearLayout mLinear_Check;
    @BindView(R.id.tv_zhishiqi)
    TextView mTextView;
    @BindView(R.id.tv_address_city_cont)
    TextView tv_address_city;
    @BindView(R.id.image_city)
    ImageView image_city;
    @BindView(R.id.linear_location_city)
    LinearLayout linear_location_city;
    @BindView(image_refresh_city)
    ImageView mImage_Refresh_city;
    @BindView(R.id.image_sy_city)
    ImageView mImage_Sy_city;
    @BindView(R.id.linear_cache)
    LinearLayout linear_cache;
    @BindView(R.id.linear_city)
    LinearLayout linear_city;
    private CityAdapter mCityAdapter;
    private boolean mCheck=true;
    private SearchAddressAdapter mSearchAddressAdapter;
    /***
     * 反地址搜索
     */
    private GeoCoder mGeoSearch = GeoCoder.newInstance();
    /**
     * 附近搜索type
     */
    private PoiSearch mPoiSearch = PoiSearch.newInstance();
    /**
     * 城市内部关键词搜索输入内容
     */
    private PoiSearch mPoiSearchEdit = PoiSearch.newInstance();
    /***
     * 行政区域搜索
     */
    private DistrictSearch mPoiSearchCity = DistrictSearch.newInstance();
    /**
     * 搜索类型---写字楼,学校,小区,市区内部按照关键词搜索,行政区域搜索
     */
    private ReverseGeoCodeOption  mPoiRevers;
    private PoiNearbySearchOption mPoiPlot;
    private PoiNearbySearchOption mPoiOffice;
    private PoiNearbySearchOption mPoiSchool;
    private PoiCitySearchOption   mPoiInCity;
    private DistrictSearchOption mDistrictOption;
    private int mRange=2000;//搜索范围
    /****
     * 定位
     */
    private LocationClient mLocationClient;
    /**
     * 定位监听
     */
    public BDLocationListener myListener = new MyLocationListener();
    private   BaiduMap mBaiduMap=null;

    private boolean isFistLocation=true;
    /***
     * 陀螺仪最后的x
     */
    private float mLastX=0;
    /**
     * 当前位置金纬度
     */
    private LatLng mLocationLat=null;
    /**
     * 陀螺仪
     */
    private MyOrientationListener mMyOrientationListener;

    /**
     * 最后一次移动位置金纬度
     */
    private LatLng mLastLat;

    /**
     * 每页多少个
     */
    private int mPageSize = 20;
    /**
     * 当前搜索0全部 1写字楼 2小区 3学校
     */
    private int mType = 0;

    private MapAdapter mMapAdapter;

    /**
     * 是否开启城市修改
     */
    private boolean isChooseCity = false;
    private String mCheckCity="";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_select_address);
        ButterKnife.bind(this);
        initRecycler();
        initMap();
        initMyLoc();
        initSearchOption();
        initCity();
        initSearchEdit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.image_location:
                if(mLocationLat!=null){
                    showMap(mLocationLat.latitude,mLocationLat.longitude);
                }
                break;
            case R.id.linear_city:
                mCheck=!mCheck;
                Utils.rotation(image_city,mCheck);
                mEdit_City.setText("");
                mEdit_City.setFocusable(false);//失去焦点
                //恢复mEdit_City可以点击,不会出发onFouchChangeListener
                mEdit_City.setFocusable(true);
                mEdit_City.setFocusableInTouchMode(true);
                KeyboardUtils.hideSoftInput(this);
                if(mCheck){
                    city_layout.setVisibility(View.GONE);
                }else{
                    city_layout.setVisibility(View.VISIBLE);
                }

                break;
            case R.id.linear_location_city:
                mImage_Refresh_city.setVisibility(View.VISIBLE);
                mImage_Sy_city.setVisibility(View.GONE);
                isChooseCity=true;
                break;
            case R.id.tv_address_city_cont:
                mCheck = !mCheck;
                Utils.rotation(image_city, mCheck);
                if (mCheck) {
                    city_layout.setVisibility(View.GONE);
                } else {
                    city_layout.setVisibility(View.VISIBLE);
                }
                mTv_City.setText(tv_address_city.getText().toString());
                mPoiSearchCity.searchDistrict(mDistrictOption
                        .cityName(tv_address_city.getText().toString()));

                break;
            case R.id.tv_cancle:
                mEdit_City.setText("");
                mEdit_City.setFocusable(false);//失去焦点
                //恢复mEdit_City可以点击
                mEdit_City.setFocusable(true);
                mEdit_City.setFocusableInTouchMode(true);
                KeyboardUtils.hideSoftInput(this);
                break;
        }
    }
    /**
     * 输入搜索初始化
     */
    private void initSearchEdit() {
        mEdit_City.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if(hasFocus){
                    Log.i("TAG","hasFocus:"+hasFocus);
                    if(!mCheck){//
                        mCheck=true;
                        Utils.rotation(image_city,mCheck);
                    }
                    mTv_cancle.setVisibility(View.VISIBLE);
                    city_layout.setVisibility(View.GONE);
                    view_bg.setVisibility(View.VISIBLE);
                    mRecycler_Search.setVisibility(View.VISIBLE);
                }else{
                    Log.i("TAG","hasFocuss:"+hasFocus);
                    mTv_cancle.setVisibility(View.GONE);
                    city_layout.setVisibility(View.GONE);
                    view_bg.setVisibility(View.GONE);
                    mRecycler_Search.setVisibility(View.GONE);
                }
            }
        });

        /**
         * 输入搜索
         */
        mPoiSearchEdit.setOnGetPoiSearchResultListener(new OnGetPoiSearchResultListener() {
            @Override
            public void onGetPoiResult(PoiResult poiResult) {
                if (poiResult.getAllPoi() != null) {
                    view_bg.setVisibility(View.GONE);
                    if (poiResult.getAllPoi().size() > 0) {
                        mRecycler_Search.setVisibility(View.VISIBLE);
                        mSearchAddressAdapter.setData(poiResult.getAllPoi());
                        mSearchAddressAdapter.notifyDataSetChanged();
                        view_bg.setVisibility(View.GONE);
                        linear_cache.setVisibility(View.GONE);
                    } else {
                        view_bg.setVisibility(View.VISIBLE);
                        mRecycler_Search.setVisibility(View.GONE);
                    }
                } else {
                    //view_bg.setVisibility(View.VISIBLE);
                    mSearchAddressAdapter.setData(null);
//                    if (isStartSearch)
//                        view_bg.setVisibility(View.VISIBLE);
//                    mSearchAddressAdapter.setData(new ArrayList<>());
                }
            }

            @Override
            public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

            }

            @Override
            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

            }
        });
        mEdit_City.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                mPoiInCity.city(mTv_City.getText().toString().trim());
                mPoiInCity.keyword(mEdit_City.getText().toString().trim());
                mPoiSearchEdit.searchInCity(mPoiInCity);
                if (s.length() != 0) {
                    mClean.setVisibility(View.VISIBLE);
                } else {
                    mClean.setVisibility(View.GONE);
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });


    }
    private void initCity() {
        //添加textview
        for (int i = 0; i < mLinearList.length; i++) {
            TextView mTextView = new TextView(MySelectAddress.this);
            mTextView.setTextColor(getResources().getColor(R.color.tab_press_text));
            mTextView.setTextSize(11);
            mTextView.setText(mLinearList[i]);
            mTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
            mLinear_Check.addView(mTextView);
        }
        mLinear_Check.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                int i = ((int) (event.getY() / (mLinear_Check.getMeasuredHeight() / 26))) - 1;
                if (i < mLinearList.length) {
                    if (i > -1) {
                        mTextView.setVisibility(View.VISIBLE);
                        mTextView.setText(mLinearList[i]);
                        for (int j = 0; j < DemoApplication.mCity.size(); j++) {
                            if (DemoApplication.mCity.get(j).getCity().equals(mLinearList[i])) {
                                moveToPosition(j);
                                break;
                            }
                        }
                    }
                }
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    mTextView.setVisibility(View.GONE);
                }
                return true;
            }
        });
    }

    /**
     * 移动
     *
     * @param n
     */
    private void moveToPosition(int n) {
        int firstItem = mLinearLayoutManager.findFirstVisibleItemPosition();
        int lastItem = mLinearLayoutManager.findLastVisibleItemPosition();
        Log.i("TAG","firstItem:"+firstItem);
        Log.i("TAG","lastItem:"+lastItem);
        if (n <= firstItem) {
            recycler_city.scrollToPosition(n);
        } else if (n <= lastItem) {
            int top = recycler_city.getChildAt(n - firstItem).getTop();
            recycler_city.scrollBy(0, top);
        } else {
            recycler_city.scrollToPosition(n);
        }
    }


    /***
     * tab监听
     * @param i
     * @param view
     */
    @Override
    public void onClick(int i, View view) {
        Log.i("TAG","A"+i);
        mType=i;
        searchNeayBy(mLastLat);
    }

    /**
     * 初始化地图
     */
    private void initMap() {
        mBaiduMap = mMapView.getMap();
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        //交通
        mBaiduMap.setTrafficEnabled(true);
        mBaiduMap.setMyLocationEnabled(true);
        mLocationClient = new LocationClient(getApplicationContext());
        mLocationClient.registerLocationListener(myListener);

        /**
         * 隐藏图标
         */
        View child = mMapView.getChildAt(1);
        if (child != null && (child instanceof ImageView || child instanceof ZoomControls)) {
            // child.setVisibility(View.INVISIBLE);
        }
        /**
         * 隐藏比例尺
         */
        //mMapView.showScaleControl(false);
        //每隔1000ms定位一次
        MapUtils.initMap(mLocationClient, 1000);
        //initListener();
    }

    /**
     * 初始化recyclerview
     */
    private void initRecycler() {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mMapAdapter = new MapAdapter());
        recycler_city.setLayoutManager(mLinearLayoutManager=new LinearLayoutManager(this));
        recycler_city.setAdapter(mCityAdapter=new CityAdapter(DemoApplication.mCity));
        mCityAdapter.notifyDataSetChanged();
        mRecycler_Search.setLayoutManager(new LinearLayoutManager(this));
        mRecycler_Search.setAdapter(mSearchAddressAdapter=new SearchAddressAdapter());
    }

    @Override
    public void onGetPoiResult(PoiResult poiResult) {
        Log.i("TAG","C1");
        if(poiResult.getAllPoi()!=null){
            mMapAdapter.setData(poiResult.getAllPoi());
            mMapAdapter.notifyDataSetChanged();
        }else{
            mMapAdapter.setData(null);
        }
    }

    @Override
    public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

    }

    @Override
    public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

    }

    @Override
    public void onOrientationChanged(float x) {
        this.mLastX=x;
    }

    @Override
    public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {

    }

    @Override
    public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
        if(reverseGeoCodeResult.getPoiList()!=null){
            mMapAdapter.setData(reverseGeoCodeResult.getPoiList());
            mMapAdapter.notifyDataSetChanged();
        }else{
            mMapAdapter.setData(null);
        }
    }

    /***
     * 区域搜索
     * @param districtResult
     */
    @Override
    public void onGetDistrictResult(DistrictResult districtResult) {
        if(districtResult!=null){
            showMap(districtResult.centerPt.latitude,districtResult.centerPt.longitude);
        }

    }

    /**
     * 定位监听
     */
    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(final BDLocation location) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (location.getLocType() == BDLocation.TypeServerError) {
                        Toast.makeText(getApplicationContext(), "请您检查是否禁用获取位置信息权限,尝试重新请求定位~", Toast.LENGTH_SHORT).show();
                        return;
                    }

                    /**
                     * 如果第一次定位添加marker
                     */
                    if (isFistLocation) {
                        showMap(location.getLatitude(), location.getLongitude());
                        isFistLocation = false;
                    }
                    mLocationLat = new LatLng(location.getLatitude(), location.getLongitude());
                    MyLocationData locData = new MyLocationData.Builder()
                            .accuracy(location.getRadius())
                            .direction(mLastX)
                            .latitude(location.getLatitude())
                            .longitude(location.getLongitude())
                            .build();
                    mBaiduMap.setMyLocationData(locData);
                    //使用默认图标
                    MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL, true,null);
                    mBaiduMap.setMyLocationConfiguration(config);
                    tv_address_city.setText(location.getCity());
                    if(isChooseCity){
                        mImage_Refresh_city.setVisibility(View.GONE);
                        mImage_Sy_city.setVisibility(View.VISIBLE);
                        isChooseCity=false;
                    }
                    if(TextUtils.isEmpty(mCheckCity)){
                        mTv_City.setText(location.getCity());
                        mCheckCity=location.getCity();
                    }else{
                        mTv_City.setText(mCheckCity);
                    }
                }
            });
        }
    }



    /**
     * 移动地图
     */
    private void showMap(double latitude, double longtitude) {
        LatLng mLatLng = new LatLng(latitude, longtitude);
        MapStatus mMapStatus = new MapStatus.Builder()
                .target(mLatLng)
                .zoom(16)
                .build();
        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
        mBaiduMap.animateMapStatus(mMapStatusUpdate);
        searchNeayBy(mLatLng);
    }
    /**
     * 搜索周边地理位置
     */
    private void searchNeayBy(LatLng point) {
        if (point == null)
            return;
        mLastLat = point;
        switch (mType) {
            case 0://全部地址,根据经纬度反地址搜索
                mGeoSearch.reverseGeoCode(mPoiRevers
                        .location(point));
                Log.i("TAG","B1");
                break;
            case 1://写字楼
                Log.i("TAG","B2");
                mPoiOffice.location(point);
                mPoiSearch.searchNearby(mPoiOffice);
                break;
            case 2://小区
                Log.i("TAG","B3");
                mPoiPlot.location(point);
                mPoiSearch.searchNearby(mPoiPlot);
                break;
            case 3://学校
                Log.i("TAG","B4");
                mPoiSchool.location(point);
                mPoiSearch.searchNearby(mPoiSchool);
                break;

        }

    }


    /**
     * 初始化搜索类型s
     */
    private void initSearchOption() {

//        mPoiAll = new PoiNearbySearchOption();
//        mPoiAll.sortType(PoiSortType.distance_from_near_to_far);
//        mPoiAll.radius(mRange);
//        mPoiAll.pageCapacity(mPageSize);
//        mPoiAll.pageNum(0);
//        mPoiAll.keyword("房子");
        mPoiRevers=new ReverseGeoCodeOption();
        mPoiRevers.location(null);


        mPoiOffice = new PoiNearbySearchOption();
        mPoiOffice.keyword("写字楼");
        mPoiOffice.sortType(PoiSortType.distance_from_near_to_far);
        mPoiOffice.radius(mRange);
        mPoiOffice.pageCapacity(mPageSize);
        mPoiOffice.pageNum(0);
        mPoiOffice.location(null);


        mPoiPlot = new PoiNearbySearchOption();
        mPoiPlot.sortType(PoiSortType.distance_from_near_to_far);
        mPoiPlot.radius(mRange);
        mPoiPlot.pageCapacity(mPageSize);
        mPoiPlot.pageNum(0);
        mPoiPlot.keyword("小区");
        mPoiPlot.location(null);


        mPoiSchool = new PoiNearbySearchOption();
        mPoiSchool.sortType(PoiSortType.distance_from_near_to_far);
        mPoiSchool.radius(mRange);
        mPoiSchool.pageCapacity(mPageSize);
        mPoiSchool.pageNum(0);
        mPoiSchool.keyword("学校");
        //城市内部关键词搜索设置
        mPoiInCity=new PoiCitySearchOption();
        mPoiInCity.city(null);//根据用户输入动态配置
        mPoiInCity.keyword(null);////根据用户输入动态配置
        mPoiInCity.pageCapacity(mPageSize);
        //行政区域搜索设置
        mDistrictOption=new DistrictSearchOption();
        mDistrictOption.cityName(null);//根据用户选择进行设置

        mGeoSearch.setOnGetGeoCodeResultListener(this);
        mPoiSearch.setOnGetPoiSearchResultListener(this);
        mPoiSearchCity.setOnDistrictSearchListener(this);
        image_location.setOnClickListener(this);
        linear_city.setOnClickListener(this);
        linear_location_city.setOnClickListener(this);
        tv_address_city.setOnClickListener(this);
        myIndicator.setIndiacatorListener(this);
        mTv_cancle.setOnClickListener(this);
        mCityAdapter.setmOnItemOnClickListener(new CityAdapter.OnItemOnClickListener() {
            @Override
            public void onClick(int position, View view) {
                mCheck = !mCheck;
                Utils.rotation(image_city, mCheck);
                if (mCheck) {
                    city_layout.setVisibility(View.GONE);
                } else {
                    city_layout.setVisibility(View.VISIBLE);
                }
                mCheckCity=DemoApplication.mCity.get(position).getCity();
                mTv_City.setText(mCheckCity);
                mPoiSearchCity.searchDistrict(mDistrictOption
                        .cityName(DemoApplication.mCity.get(position).getCity()));


            }
        });
        mBaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
            @Override
            public void onMapStatusChangeStart(MapStatus mapStatus) {

            }

            @Override
            public void onMapStatusChangeStart(MapStatus mapStatus, int i) {

            }

            @Override
            public void onMapStatusChange(MapStatus mapStatus) {

            }

            @Override
            public void onMapStatusChangeFinish(MapStatus mapStatus) {
                if(mapStatus!=null){
                    translate(mImage_Center);
                    searchNeayBy(mapStatus.target);
                }
            }
        });

    }

    /**
     * 图片动画
     *
     * @param view
     */
    private void translate(View view) {
        TranslateAnimation anim = new TranslateAnimation(0, 0, 20, 0);
        anim.setDuration(200);
        anim.setRepeatCount(2);
        anim.setRepeatMode(Animation.REVERSE);
        view.startAnimation(anim);
    }
    @Override
    protected void onStart() {
        super.onStart();
        mBaiduMap.setMyLocationEnabled(true);
        if(!mLocationClient.isStarted()){
               new RxPermissions(this).requestEach(Manifest.permission.ACCESS_COARSE_LOCATION).subscribe(new Subscriber<Permission>() {
                   @Override
                   public void onCompleted() {

                   }

                   @Override
                   public void onError(Throwable e) {

                   }

                   @Override
                   public void onNext(Permission permission) {
                       if(permission.granted){
                           mLocationClient.start();
                           mMyOrientationListener.start();
                       } else if (permission.shouldShowRequestPermissionRationale) {
                           Toast.makeText(getApplicationContext(),"请允许定位权限",Toast.LENGTH_LONG).show();
                       } else {
                           Toast.makeText(getApplicationContext(),"请允许定位权限,需要手动设置",Toast.LENGTH_LONG).show();
                           startActivity(Utils.getAppDetailSettingIntent());
                       }
                   }
               });
        }
    }

    /**
     * 初始化陀螺仪
     */
    private void initMyLoc() {
        mMyOrientationListener = new MyOrientationListener(this);
        mMyOrientationListener.setOnOrientationListener(this);
    }
    @Override
    protected void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mMapView.onPause();

    }
    @Override
    protected void onStop() {
        super.onStop();
        mLocationClient.stop();
        mBaiduMap.setMyLocationEnabled(false);
        mMyOrientationListener.stop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
        mGeoSearch.destroy();
        mPoiSearch.destroy();
        mPoiSearchCity.destroy();
        mPoiSearchEdit.destroy();
    }
}

2.百度地图只步行路径规划

2.1.效果图

图片.png
2.2具体代码如下:
public class MyRoutePlanActivity extends AppCompatActivity implements OnGetRoutePlanResultListener,View.OnClickListener{
     @BindView(R.id.mapview_shop_map)
     MapView mapView;
     BaiduMap baiduMap;
     @BindView(R.id.tv_daohang)
     LinearLayout tv_daohang;
    /**
     * 步行路径规划
     */
    RoutePlanSearch mRoutePlanSearch=RoutePlanSearch.newInstance();
    private double startLat=22.590164;
    private double startLon=113.977696;
    private double endLat=22.545682;
    private double endLon=113.923962;
    PlanNode stNode;
    PlanNode enNode;
    WalkingRoutePlanOption mPlanOption;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_route_plan);
        ButterKnife.bind(this);
        baiduMap=mapView.getMap();
        mapView.getChildAt(2).setPadding(0, 0, 30, 90);//这是控制缩放控件的位置
        /***
         * 步行路径规划配置
         */
        mPlanOption=new WalkingRoutePlanOption();
        stNode=PlanNode.withLocation(new LatLng(startLat,startLon));
        enNode=PlanNode.withLocation(new LatLng(endLat,endLon));
        mPlanOption.from(stNode).to(enNode);
        mRoutePlanSearch.setOnGetRoutePlanResultListener(this);
        mRoutePlanSearch.walkingSearch(mPlanOption);
        tv_daohang.setOnClickListener(this);
    }

    @Override
    public void onGetWalkingRouteResult(WalkingRouteResult result) {
        if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
            Toast.makeText(getApplicationContext(),"抱歉,未找到结果",Toast.LENGTH_LONG).show();
        }
        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
            //起终点或途经点地址有岐义,通过以下接口获取建议查询信息
            result.getSuggestAddrInfo();
            return;
        }
        if (result.error == SearchResult.ERRORNO.NO_ERROR) {
            WalkingRouteOverlay overlay = new WalkingRouteOverlay(baiduMap);
            baiduMap.setOnMarkerClickListener(overlay);
            overlay.setData(result.getRouteLines().get(0));
            overlay.addToMap();
            overlay.zoomToSpan();
            /**
             * 修改比例尺
             */
            MapStatus mMapStatus = new MapStatus.Builder()
                    .zoom(15)
                    .build();
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
            baiduMap.animateMapStatus(mMapStatusUpdate);
        }
    }

    @Override
    public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {

    }

    @Override
    public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {

    }

    @Override
    public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {

    }

    @Override
    public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {

    }

    @Override
    public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_daohang:
                Utils.mapWalkingDaoHang(this, stNode.getLocation().latitude + "", stNode.getLocation().longitude + "", "startAddress"
                        , enNode.getLocation().latitude + "", enNode.getLocation().longitude + "", "endAddress",stNode.getCity());
                break;

        }
    }
}

3.移动app跳转到百度地图

API参考链接:http://lbsyun.baidu.com/index.php?title=uri/api/android

4.GitHub代码参考地址:https://github.com/Asmewill/BaiduMapsApiASDemos

5.百度定位demo地址:https://github.com/Asmewill/BaiduLocDemo

上一篇下一篇

猜你喜欢

热点阅读