高德地图 (显示蓝点,驾车路线)

  
              这是一个标题

AndroidManifest  声明权限

//地图SDK(包含其搜索功能)需要的基础权限 <!--允许程序打开网络套接字-->

<uses-permission android:name="android.permission.INTERNET" />

<!--允许程序设置内置sd卡的写权限-->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!--允许程序获取网络状态-->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!--允许程序访问WiFi网络信息-->

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<!--允许程序读写手机状态和身份-->

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

设置高德Key

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key </meta-data>

XML布局

<com.amap.api.maps.MapView

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

在Android Studio环境下:

步骤1:

添加so文件,在src/main/目录下新建jniLibs目录,并将文件放入其中。

使用默认配置,不需要修改build.gradle。在 main 目录下创建文件夹 jniLibs (如果有就不需要创建了),将下载文件的 armeabi 文件夹复制到这个目录下,如果已经有这个目录,将下载的 so 库复制到这个目录即可。

代码实现:

public class Main2Activity extends AppCompatActivity implements RouteSearch.OnRouteSearchListener, AMap.OnMyLocationChangeListener, GeocodeSearch.OnGeocodeSearchListener {

    private MapView mapView;
    private AMap aMap;
    private double latitude;
    private double longitude;
    private RouteSearch routeSearch;
    private LatLonPoint latLonPoint;
    private String mudidi;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //定义了一个地图view
        mapView = (MapView) findViewById(R.id.map);
        mapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
//初始化地图控制器对象
        if (aMap == null) {
            aMap = mapView.getMap();
        }
        Intent intent = getIntent();
        mudidi = intent.getStringExtra("a");
        initbluedian();

    }
//坐标转换
    private void zuobiaohuhuan() {
        GeocodeSearch geocoderSearch;

        //地理编码搜索GeocodeSearch
        geocoderSearch = new GeocodeSearch(this);
        geocoderSearch.setOnGeocodeSearchListener(this);
        // name表示地址,第二个参数表示查询城市,中文或者中文全拼,citycode、adcode
        GeocodeQuery query = new GeocodeQuery(mudidi, "");

        geocoderSearch.getFromLocationNameAsyn(query);
    }
    private void initluxian() {
        routeSearch = new RouteSearch(this);
        routeSearch.setRouteSearchListener(this);
        // fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持16个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
        Log.d("Main2Activity", "latitude:" + latitude);
        Log.d("Main2Activity", "latitude:" + longitude);
        Log.d("Main2Activity", "latitude:" + latLonPoint);
        RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(latitude,longitude),latLonPoint);
        RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.BUS_DEFAULT, null, null, "");
        routeSearch.calculateDriveRouteAsyn(query);

    }
    //设置定位蓝点
    private void initbluedian() {

        MyLocationStyle myLocationStyle;
        myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
      //  myLocationStyle.interval(2000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。
        aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
        myLocationStyle.showMyLocation(true);//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
        aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
        aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
        //设置SDK 自带定位消息监听
        aMap.setOnMyLocationChangeListener(this);


    }
 //获取我的位置
    @Override
    public void onMyLocationChange(Location location) {
        //维度
        latitude = location.getLatitude();
        //经度
        longitude = location.getLongitude();
        zuobiaohuhuan();
    }
   @Override
    public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

    }
    //获取终点位置  
    @Override
    public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
        latLonPoint = geocodeResult.getGeocodeAddressList().get(0).getLatLonPoint();
        initluxian();
    }
 @Override
    public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
        aMap.clear();// 清理地图上的所有覆盖物
        if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
            if (result != null && result.getPaths() != null) {
                if (result.getPaths().size() > 0) {
                    final DrivePath drivePath = result.getPaths()
                            .get(0);
                    if (drivePath == null) {
                        return;
                    }
                    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
                            Main2Activity.this, aMap, drivePath,
                            result.getStartPos(),
                            result.getTargetPos(), null);
                    drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
                    drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
                    drivingRouteOverlay.removeFromMap();
                    drivingRouteOverlay.addToMap();
                    drivingRouteOverlay.zoomToSpan();
//                    mBottomLayout.setVisibility(View.VISIBLE);
//                    int dis = (int) drivePath.getDistance();
//                    int dur = (int) drivePath.getDuration();
//                    String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";
//                    mRotueTimeDes.setText(des);
//                    mRouteDetailDes.setVisibility(View.VISIBLE);
//                    int taxiCost = (int) mDriveRouteResult.getTaxiCost();
//                    mRouteDetailDes.setText("打车约"+taxiCost+"元");
//                    mBottomLayout.setOnClickListener(new OnClickListener() {
//                        @Override
//                        public void onClick(View v) {
//                            Intent intent = new Intent(mContext,
//                                    DriveRouteDetailActivity.class);
//                            intent.putExtra("drive_path", drivePath);
//                            intent.putExtra("drive_result",
//                                    mDriveRouteResult);
//                            startActivity(intent);
//                        }
//                    });

                } else if (result != null && result.getPaths() == null) {
                    ToastUtil.show(Main2Activity.this, R.string.no_result);
                }

            } else {
                ToastUtil.show(Main2Activity.this, R.string.no_result);
            }
        } else {
            ToastUtil.showerror(Main2Activity.this, errorCode);
        }
    }

    @Override
    public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {

    }

    @Override
    public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {

    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值