2016年最新百度地图开发demo,定位+导航

来源:互联网 发布:大学生单片机竞赛 编辑:程序博客网 时间:2024/04/28 10:11

          写这篇博格的原因是刚好有需求,然后四处找资料发现百度地图更新太快,网上的博客demo都过时了。对于初学者来说,跟着博客学比较方便快捷,但当有一定程度虚席以后建议跟着官方提供的sample及api学习。


先看一下效果图吧

                  


首先开发环境,本人用的android studio,跟着潮流走嘛!所以我们就从导入百度地图所需的jar和so文件开始,jar的导入就不讲了,你都懂得,嘿嘿!

  一.Android studio中默认使用的是gradle编译方式,与ADT编辑方式不一样,那么so文件应当如何引入呢?

其实很简单。看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。

首先,在我们的Module的根目录中建立libs目录,将j百度地图集所需的so文件分别拷入,截图如下:



然后就是编写我们的build.gradle文件。

关于so文件引入的配置很简单,代码配置如下:


task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {    destinationDir file("$projectDir/libs")    baseName "Native_Libs2"    extension "jar"    from fileTree(dir: "libs", include: "**/*.so")    into "lib"}


自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into "lib",那么动态运行库就被拷入到lib目录中。

完整的build.gradle文件如下:

完整的build.gradle文件如下:


apply plugin: 'com.android.application'android {    compileSdkVersion 23    buildToolsVersion "23.0.1"    packagingOptions{        exclude'META-INF/LICENSE.txt'        exclude'META-INF/NOTICE.txt'    }    defaultConfig {        applicationId "com.zyx"        minSdkVersion 14        targetSdkVersion 23        versionCode 1        versionName "1.0"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {        destinationDir file("$projectDir/libs")        baseName "Native_Libs2"        extension "jar"        from fileTree(dir: "libs", include: "**/*.so")        into "lib"    }    tasks.withType(JavaCompile) {        compileTask -> compileTask.dependsOn(nativeLibsToJar)    }}repositories{    flatDir{        dirs 'libs' //就是你放aar的目录地址        maven { url "https://jitpack.io" }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    compile 'com.android.support:appcompat-v7:23.1.0'    compile files('libs/commons-codec-1.6.jar')    compile files('libs/commons-logging-1.1.1.jar')    compile files('libs/fluent-hc-4.2.5.jar')    compile files('libs/httpclient-4.2.5.jar')    compile files('libs/httpclient-cache-4.2.5.jar')    compile files('libs/httpcore-4.2.4.jar')    compile files('libs/httpmime-4.2.5.jar')    compile files('libs/libammsdk.jar')    compile files('libs/universal-image-loader-1.9.3-SNAPSHOT.jar')    compile files('libs/xUtils-2.6.14.jar')    compile project(':sideingmenu')    compile files('libs/MobCommons-2016.0303.1229.jar')    compile files('libs/MobTools-2016.0303.1229.jar')    compile name: 'SMSSDK-2.0.2', ext: 'aar'    compile name: 'SMSSDKGUI-2.0.2', ext: 'aar'    compile 'in.srain.cube:ultra-ptr:1.0.7@aar'    compile project(':pull')    compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'    compile files('libs/ipaynow_alipay_v1.0.1.jar')    compile files('libs/ipaynow_base_v1.3.5.jar')    compile files('libs/ipaynow_qq_v1.0.0.jar')    compile files('libs/ipaynow_upmp_v1.0.2.jar')    compile files('libs/ipaynow_wechatwp_v1.0.1.jar')    compile files('libs/Sunflower.jar')    compile files('libs/zxing.jar')}


二,就正式进入开发

1.设置全局的application,如此就不用再每个活动中初始百度sdk了

package com.zyx.map;import android.app.Application;import com.baidu.mapapi.SDKInitializer;/** * Created by zyx on 2016/5/23. */public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        // 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext        SDKInitializer.initialize(this);    }}

2.MainActivity,源码

package com.zyx.map;import android.app.Activity;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.MapView;public class MainActivity extends Activity implements OnClickListener{    private Button bt_local;    private Button bt_guide;    private Button bt_city;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bt_local = (Button) findViewById(R.id.bt_local);        bt_guide = (Button) findViewById(R.id.bt_guide);        bt_city = (Button) findViewById(R.id.bt_city);        bt_local.setOnClickListener(this);        bt_guide.setOnClickListener(this);        bt_city.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.bt_local:                Intent i = new Intent(MainActivity.this,LocationDemo.class);                startActivity(i);                break;            case R.id.bt_guide:                i = new Intent(MainActivity.this,RoutePlanDemo.class);                startActivity(i);                break;            case R.id.bt_city:                i = new Intent(MainActivity.this,DistrictSearchDemo.class);                startActivity(i);                break;        }    }}



3.定位 源码

package com.zyx.map;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RadioGroup;import android.widget.RadioGroup.OnCheckedChangeListener;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;/** * demo用来展示如何结合定位SDK实现定位,并使用MyLocationOverlay绘制定位位置 同时展示如何使用自定义图标绘制并点击时弹出泡泡 */public class LocationDemo extends Activity {    // 定位相关    LocationClient mLocClient;    public MyLocationListenner myListener = new MyLocationListenner();    private LocationMode mCurrentMode;    BitmapDescriptor mCurrentMarker;    private static final int accuracyCircleFillColor = 0xAAFFFF88;    private static final int accuracyCircleStrokeColor = 0xAA00FF00;    MapView mMapView;    BaiduMap mBaiduMap;     // UI相关    OnCheckedChangeListener radioButtonListener;    Button requestLocButton;    boolean isFirstLoc = true; // 是否首次定位    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_location);        requestLocButton = (Button) findViewById(R.id.button1);        mCurrentMode = LocationMode.NORMAL;        requestLocButton.setText("普通");        OnClickListener btnClickListener = new OnClickListener() {            public void onClick(View v) {                switch (mCurrentMode) {                    case NORMAL:                        requestLocButton.setText("跟随");                        mCurrentMode = LocationMode.FOLLOWING;                        mBaiduMap                                .setMyLocationConfigeration(new MyLocationConfiguration(                                        mCurrentMode, true, mCurrentMarker));                        break;                    case COMPASS:                        requestLocButton.setText("普通");                        mCurrentMode = LocationMode.NORMAL;                        mBaiduMap                                .setMyLocationConfigeration(new MyLocationConfiguration(                                        mCurrentMode, true, mCurrentMarker));                        break;                    case FOLLOWING:                        requestLocButton.setText("罗盘");                        mCurrentMode = LocationMode.COMPASS;                        mBaiduMap                                .setMyLocationConfigeration(new MyLocationConfiguration(                                        mCurrentMode, true, mCurrentMarker));                        break;                    default:                        break;                }            }        };        requestLocButton.setOnClickListener(btnClickListener);        RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);        radioButtonListener = new OnCheckedChangeListener() {            @Override            public void onCheckedChanged(RadioGroup group, int checkedId) {                if (checkedId == R.id.defaulticon) {                    // 传入null则,恢复默认图标                    mCurrentMarker = null;                    mBaiduMap                            .setMyLocationConfigeration(new MyLocationConfiguration(                                    mCurrentMode, true, null));                }                if (checkedId == R.id.customicon) {                    // 修改为自定义marker                    mCurrentMarker = BitmapDescriptorFactory                            .fromResource(R.mipmap.icon_geo);                    mBaiduMap                            .setMyLocationConfigeration(new MyLocationConfiguration(                                    mCurrentMode, true, mCurrentMarker,                                    accuracyCircleFillColor, accuracyCircleStrokeColor));                }            }        };        group.setOnCheckedChangeListener(radioButtonListener);        // 地图初始化        mMapView = (MapView) findViewById(R.id.bmapView);        mBaiduMap = mMapView.getMap();        // 开启定位图层        mBaiduMap.setMyLocationEnabled(true);        // 定位初始化        mLocClient = new LocationClient(this);        mLocClient.registerLocationListener(myListener);        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true); // 打开gps        option.setCoorType("bd09ll"); // 设置坐标类型        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 设置GPS优先  // 设置GPS优先        option.setScanSpan(1000);        option.setIsNeedAddress(true);        option.disableCache(true);//禁止启用缓存定位        mLocClient.setLocOption(option);        mLocClient.start();        mLocClient.requestLocation();    }    /**     * 定位SDK监听函数     */    public class MyLocationListenner implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            StringBuffer sb = new StringBuffer(256);            sb.append("time : ");            sb.append(location.getTime());            sb.append("\nerror code : ");            sb.append(location.getLocType());            sb.append("\nlatitude : ");            sb.append(location.getLatitude());            sb.append("\nlontitude : ");            sb.append(location.getLongitude());            sb.append("\nradius : ");            sb.append(location.getRadius());            sb.append("\nstreet : ");            sb.append(location.getStreet());            sb.append("\nstreetNum : ");            sb.append(location.getStreetNumber());            if (location.getLocType() == BDLocation.TypeGpsLocation){                sb.append("\nspeed : ");                sb.append(location.getSpeed());                sb.append("\nsatellite : ");                sb.append(location.getSatelliteNumber());            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){                sb.append("\naddr : ");                sb.append(location.getAddrStr());            }            Log.e("log", sb.toString());            Log.e("addr", location.getAddrStr());            Toast.makeText(getApplicationContext(),location.getAddrStr()+"city"+location.getCity(),Toast.LENGTH_LONG).show();            MyLocationData locData = new MyLocationData.Builder()                    .accuracy(location.getRadius())                            // 此处设置开发者获取到的方向信息,顺时针0-360                    .direction(100).latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            mBaiduMap.setMyLocationData(locData);            if (isFirstLoc) {                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(),                        location.getLongitude());                MapStatus.Builder builder = new MapStatus.Builder();                builder.target(ll).zoom(18.0f);                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));            }        }        public void onReceivePoi(BDLocation poiLocation) {        }    }    @Override    protected void onPause() {        mMapView.onPause();        super.onPause();    }    @Override    protected void onResume() {        mMapView.onResume();        super.onResume();    }    @Override    protected void onDestroy() {        // 退出时销毁定位        mLocClient.stop();        // 关闭定位图层        mBaiduMap.setMyLocationEnabled(false);        mMapView.onDestroy();        mMapView = null;        super.onDestroy();    }}
4.导航全部源码

package com.zyx.map;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.InfoWindow;import com.baidu.mapapi.map.MapPoi;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import com.baidu.mapapi.search.core.RouteLine;import com.baidu.mapapi.search.core.SearchResult;import com.baidu.mapapi.search.route.BikingRouteLine;import com.baidu.mapapi.search.route.BikingRoutePlanOption;import com.baidu.mapapi.search.route.BikingRouteResult;import com.baidu.mapapi.search.route.DrivingRouteLine;import com.baidu.mapapi.search.route.DrivingRoutePlanOption;import com.baidu.mapapi.search.route.DrivingRouteResult;import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;import com.baidu.mapapi.search.route.PlanNode;import com.baidu.mapapi.search.route.RoutePlanSearch;import com.baidu.mapapi.search.route.TransitRouteLine;import com.baidu.mapapi.search.route.TransitRoutePlanOption;import com.baidu.mapapi.search.route.TransitRouteResult;import com.baidu.mapapi.search.route.WalkingRouteLine;import com.baidu.mapapi.search.route.WalkingRoutePlanOption;import com.baidu.mapapi.search.route.WalkingRouteResult;import com.zyx.map.overlayutil.BikingRouteOverlay;import com.zyx.map.overlayutil.DrivingRouteOverlay;import com.zyx.map.overlayutil.OverlayManager;import com.zyx.map.overlayutil.TransitRouteOverlay;import com.zyx.map.overlayutil.WalkingRouteOverlay;/** * demo用来展示如何进行驾车、步行、公交路线搜索并在地图使用RouteOverlayTransitOverlay绘制 * 同时展示如何进行节点浏览并弹出泡泡 */public class RoutePlanDemo extends Activity implements BaiduMap.OnMapClickListener,        OnGetRoutePlanResultListener {    EditText editSt;    EditText editEn;    // 浏览路线节点相关    Button mBtnPre = null; // 上一个节点    Button mBtnNext = null; // 下一个节点    int nodeIndex = -1; // 节点索引,供浏览节点时使用    RouteLine route = null;    OverlayManager routeOverlay = null;    boolean useDefaultIcon = false;    private TextView popupText = null; // 泡泡view    // 地图相关,使用继承MapViewMyRouteMapView目的是重写touch事件实现泡泡处理    // 如果不处理touch事件,则无需继承,直接使用MapView即可    MapView mMapView = null;    // 地图View    BaiduMap mBaidumap = null;    // 搜索相关    RoutePlanSearch mSearch = null;    // 搜索模块,也可去掉地图模块独立使用    // 定位相关    LocationClient mLocClient;    public MyLocationListenner myListener = new MyLocationListenner();    private MyLocationConfiguration.LocationMode mCurrentMode;    BitmapDescriptor mCurrentMarker;    private static final int accuracyCircleFillColor = 0xAAFFFF88;    private static final int accuracyCircleStrokeColor = 0xAA00FF00;    boolean isFirstLoc = true; // 是否首次定位    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_routeplan);        CharSequence titleLable = "路线规划功能";        setTitle(titleLable);        // 初始化地图        mMapView = (MapView) findViewById(R.id.map);        mBaidumap = mMapView.getMap();        // 处理搜索按钮响应        editSt = (EditText) findViewById(R.id.start);        editEn = (EditText) findViewById(R.id.end);        initlocal();        mBtnPre = (Button) findViewById(R.id.pre);        mBtnNext = (Button) findViewById(R.id.next);        mBtnPre.setVisibility(View.INVISIBLE);        mBtnNext.setVisibility(View.INVISIBLE);        // 地图点击事件处理        mBaidumap.setOnMapClickListener(this);        // 初始化搜索模块,注册事件监听        mSearch = RoutePlanSearch.newInstance();        mSearch.setOnGetRoutePlanResultListener(this);    }    /**     * 定位初始化     */    private void initlocal() {        // 开启定位图层        mBaidumap.setMyLocationEnabled(true);        // 定位初始化        mLocClient = new LocationClient(this);        mLocClient.registerLocationListener(myListener);        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true); // 打开gps        option.setCoorType("bd09ll"); // 设置坐标类型        option.setPriority(LocationClientOption.GpsFirst); // 设置GPS优先  // 设置GPS优先        option.setScanSpan(1000);        option.setIsNeedAddress(true);        option.disableCache(true);//禁止启用缓存定位        mLocClient.setLocOption(option);        mLocClient.start();        mLocClient.requestLocation();    }    /**     * 发起路线规划搜索示例     *     * @param v     */    public void searchButtonProcess(View v) {        // 重置浏览节点的路线数据        route = null;        mBtnPre.setVisibility(View.INVISIBLE);        mBtnNext.setVisibility(View.INVISIBLE);        mBaidumap.clear();        // 设置起终点信息,对于tranist search 来说,城市名无意义        PlanNode stNode = PlanNode.withCityNameAndPlaceName("杭州", editSt.getText().toString());        PlanNode enNode = PlanNode.withCityNameAndPlaceName("杭州", editEn.getText().toString());        // 实际使用中请对起点终点城市进行正确的设定        if (v.getId() == R.id.drive) {            mSearch.drivingSearch((new DrivingRoutePlanOption())                    .from(stNode).to(enNode));        } else if (v.getId() == R.id.transit) {            mSearch.transitSearch((new TransitRoutePlanOption())                    .from(stNode).city("北京").to(enNode));        } else if (v.getId() == R.id.walk) {            mSearch.walkingSearch((new WalkingRoutePlanOption())                    .from(stNode).to(enNode));        } else if (v.getId() == R.id.bike) {            mSearch.bikingSearch((new BikingRoutePlanOption())                    .from(stNode).to(enNode));        }    }    /**     * 节点浏览示例     *     * @param v     */    public void nodeClick(View v) {        if (route == null || route.getAllStep() == null) {            return;        }        if (nodeIndex == -1 && v.getId() == R.id.pre) {            return;        }        // 设置节点索引        if (v.getId() == R.id.next) {            if (nodeIndex < route.getAllStep().size() - 1) {                nodeIndex++;            } else {                return;            }        } else if (v.getId() == R.id.pre) {            if (nodeIndex > 0) {                nodeIndex--;            } else {                return;            }        }        // 获取节结果信息        LatLng nodeLocation = null;        String nodeTitle = null;        Object step = route.getAllStep().get(nodeIndex);        if (step instanceof DrivingRouteLine.DrivingStep) {            nodeLocation = ((DrivingRouteLine.DrivingStep) step).getEntrance().getLocation();            nodeTitle = ((DrivingRouteLine.DrivingStep) step).getInstructions();        } else if (step instanceof WalkingRouteLine.WalkingStep) {            nodeLocation = ((WalkingRouteLine.WalkingStep) step).getEntrance().getLocation();            nodeTitle = ((WalkingRouteLine.WalkingStep) step).getInstructions();        } else if (step instanceof TransitRouteLine.TransitStep) {            nodeLocation = ((TransitRouteLine.TransitStep) step).getEntrance().getLocation();            nodeTitle = ((TransitRouteLine.TransitStep) step).getInstructions();        } else if (step instanceof BikingRouteLine.BikingStep) {            nodeLocation = ((BikingRouteLine.BikingStep) step).getEntrance().getLocation();            nodeTitle = ((BikingRouteLine.BikingStep) step).getInstructions();        }        if (nodeLocation == null || nodeTitle == null) {            return;        }        // 移动节点至中心        mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));        // show popup        popupText = new TextView(RoutePlanDemo.this);        popupText.setBackgroundResource(R.drawable.popup);        popupText.setTextColor(0xFF000000);        popupText.setText(nodeTitle);        mBaidumap.showInfoWindow(new InfoWindow(popupText, nodeLocation, 0));    }    /**     * 切换路线图标,刷新地图使其生效     * 注意: 起终点图标使用中心对齐.     */    public void changeRouteIcon(View v) {        if (routeOverlay == null) {            return;        }        if (useDefaultIcon) {            ((Button) v).setText("自定义起终点图标");            Toast.makeText(this,                    "将使用系统起终点图标",                    Toast.LENGTH_SHORT).show();        } else {            ((Button) v).setText("系统起终点图标");            Toast.makeText(this,                    "将使用自定义起终点图标",                    Toast.LENGTH_SHORT).show();        }        useDefaultIcon = !useDefaultIcon;        routeOverlay.removeFromMap();        routeOverlay.addToMap();    }    @Override    protected void onRestoreInstanceState(Bundle savedInstanceState) {        super.onRestoreInstanceState(savedInstanceState);    }    @Override    public void onGetWalkingRouteResult(WalkingRouteResult result) {        if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {            Toast.makeText(RoutePlanDemo.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息            // result.getSuggestAddrInfo()            return;        }        if (result.error == SearchResult.ERRORNO.NO_ERROR) {            nodeIndex = -1;            mBtnPre.setVisibility(View.VISIBLE);            mBtnNext.setVisibility(View.VISIBLE);            route = result.getRouteLines().get(0);            WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(mBaidumap);            mBaidumap.setOnMarkerClickListener(overlay);            routeOverlay = overlay;            overlay.setData(result.getRouteLines().get(0));            overlay.addToMap();            overlay.zoomToSpan();        }    }    @Override    public void onGetTransitRouteResult(TransitRouteResult result) {        if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {            Toast.makeText(RoutePlanDemo.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息            // result.getSuggestAddrInfo()            return;        }        if (result.error == SearchResult.ERRORNO.NO_ERROR) {            nodeIndex = -1;            mBtnPre.setVisibility(View.VISIBLE);            mBtnNext.setVisibility(View.VISIBLE);            route = result.getRouteLines().get(0);            TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaidumap);            mBaidumap.setOnMarkerClickListener(overlay);            routeOverlay = overlay;            overlay.setData(result.getRouteLines().get(0));            overlay.addToMap();            overlay.zoomToSpan();        }    }    @Override    public void onGetDrivingRouteResult(DrivingRouteResult result) {        if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {            Toast.makeText(RoutePlanDemo.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息            // result.getSuggestAddrInfo()            return;        }        if (result.error == SearchResult.ERRORNO.NO_ERROR) {            nodeIndex = -1;            mBtnPre.setVisibility(View.VISIBLE);            mBtnNext.setVisibility(View.VISIBLE);            route = result.getRouteLines().get(0);            DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap);            routeOverlay = overlay;            mBaidumap.setOnMarkerClickListener(overlay);            overlay.setData(result.getRouteLines().get(0));            overlay.addToMap();            overlay.zoomToSpan();        }    }    @Override    public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {        if (bikingRouteResult == null || bikingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {            Toast.makeText(RoutePlanDemo.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();        }        if (bikingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {            // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息            // result.getSuggestAddrInfo()            return;        }        if (bikingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {            nodeIndex = -1;            mBtnPre.setVisibility(View.VISIBLE);            mBtnNext.setVisibility(View.VISIBLE);            route = bikingRouteResult.getRouteLines().get(0);            BikingRouteOverlay overlay = new MyBikingRouteOverlay(mBaidumap);            routeOverlay = overlay;            mBaidumap.setOnMarkerClickListener(overlay);            overlay.setData(bikingRouteResult.getRouteLines().get(0));            overlay.addToMap();            overlay.zoomToSpan();        }    }    // 定制RouteOverly    private class MyDrivingRouteOverlay extends DrivingRouteOverlay {        public MyDrivingRouteOverlay(BaiduMap baiduMap) {            super(baiduMap);        }        @Override        public BitmapDescriptor getStartMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);            }            return null;        }        @Override        public BitmapDescriptor getTerminalMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);            }            return null;        }    }    private class MyWalkingRouteOverlay extends WalkingRouteOverlay {        public MyWalkingRouteOverlay(BaiduMap baiduMap) {            super(baiduMap);        }        @Override        public BitmapDescriptor getStartMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);            }            return null;        }        @Override        public BitmapDescriptor getTerminalMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);            }            return null;        }    }    private class MyTransitRouteOverlay extends TransitRouteOverlay {        public MyTransitRouteOverlay(BaiduMap baiduMap) {            super(baiduMap);        }        @Override        public BitmapDescriptor getStartMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);            }            return null;        }        @Override        public BitmapDescriptor getTerminalMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);            }            return null;        }    }    private class MyBikingRouteOverlay extends BikingRouteOverlay {        public  MyBikingRouteOverlay(BaiduMap baiduMap) {            super(baiduMap);        }        @Override        public BitmapDescriptor getStartMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);            }            return null;        }        @Override        public BitmapDescriptor getTerminalMarker() {            if (useDefaultIcon) {                return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);            }            return null;        }    }    @Override    public void onMapClick(LatLng point) {        mBaidumap.hideInfoWindow();    }    @Override    public boolean onMapPoiClick(MapPoi poi) {        return false;    }    @Override    protected void onPause() {        mMapView.onPause();        super.onPause();    }    @Override    protected void onResume() {        mMapView.onResume();        super.onResume();    }    @Override    protected void onDestroy() {        mSearch.destroy();        mMapView.onDestroy();        super.onDestroy();    }    /**     * 定位SDK监听函数     */    public class MyLocationListenner implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            editSt.setText(location.getStreet());            MyLocationData locData = new MyLocationData.Builder()                    .accuracy(location.getRadius())                            // 此处设置开发者获取到的方向信息,顺时针0-360                    .direction(100).latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            mBaidumap.setMyLocationData(locData);            if (isFirstLoc) {                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(),                        location.getLongitude());                MapStatus.Builder builder = new MapStatus.Builder();                builder.target(ll).zoom(18.0f);                mBaidumap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));            }        }        public void onReceivePoi(BDLocation poiLocation) {        }    }}

最后 全部源码地址下载  http://download.csdn.net/detail/yangxin1113/9533716


3 0
原创粉丝点击