关于Android高德地图路线规划的学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34781711/article/details/82417985

其实一开始我是懵逼的
后来看了demo的源码才磕磕绊绊的做了出来。

线路规划属于Android地图SDK。
首先是流程,要有一个MainActivity主类,布局里面有MapView点击规划路线的按钮以及显示规划结果布局
然后是一个设置规划样式的工具类。
首先:
布局显示
布局的代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/shop_detail_title"
        layout="@layout/common_title_layout" />

    <Button
        android:id="@+id/shop_detail_rode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/shop_detail_title"
        android:text="规划路线" />

    <com.amap.api.maps.MapView
        android:id="@+id/g_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/shop_detail_rode" />

    <RelativeLayout
        android:id="@+id/bottom_layout"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bg_bottom_bar"
        android:gravity="center_vertical"
        android:padding="5dp"
        android:visibility="gone">

        <TextView
            android:id="@+id/firstline"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_marginLeft="12dp"
            android:singleLine="true"
            android:textColor="#333333"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/secondline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/firstline"
            android:layout_marginLeft="12dp"
            android:gravity="right"
            android:singleLine="true"
            android:textColor="#999999"
            android:textSize="13sp"
            android:visibility="gone" />

        <LinearLayout
            android:id="@+id/detail"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:text="详情"
                android:textColor="@color/blue"
                android:textSize="14sp" />

            <Button
                android:layout_width="7dp"
                android:layout_height="13dp"
                android:layout_marginLeft="4dp"
                android:background="@drawable/arrow_right_blue"
                android:gravity="center_vertical" />
        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

我们现在有了规划路线的点击按钮、显示地图的MapView和显示规划文字详情结果bottom_layout。
下面构建MainActivity类。我就不贴完整的代码了,太麻烦,贴些核心的吧。
首先是声明一些必要的东西:

private AMap aMap;
private Context mContext;
// 搜索类
private RouteSearch mRouteSearch;
// 搜索结果类
private DriveRouteResult mDriveRouteResult;
// 起点
private LatLonPoint mStartPoint = new LatLonPoint(38.3066333311, 116.7742073536);
// 终点
private LatLonPoint mEndPoint = new LatLonPoint(39.3066333311, 116.7742073536);

众所周知,要重写生命周期的一些方法:

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = this.getApplicationContext();
        mMapView.onCreate(savedInstanceState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
        mMapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态
        mMapView.onSaveInstanceState(outState);
    }

然后是执行规划,当然了,实现一些监听接口:

if (aMap == null) {
	aMap = mMapView.getMap();
}
// 注册监听
aMap.setOnMapClickListener(this);
aMap.setOnMarkerClickListener(this);
mRouteSearch = new RouteSearch(this);
mRouteSearch.setRouteSearchListener(this);
// 规划路线
RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStartPoint, mEndPoint);
// 起点终点,驾车模式,途径点,避让区域,避让道路
RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DrivingDefault, null, null, "");
mRouteSearch.calculateDriveRouteAsyn(query);// 异步路线规划驾驶模式查询

到这里都不难,或者说不复杂。下面就是解析返回的规划结果。

猜你喜欢

转载自blog.csdn.net/qq_34781711/article/details/82417985