高德地图之自定义路线图

自定义内容:起点坐标,终点坐标,路线颜色

Paste_Image.png
Paste_Image.png

第一步

添加权限

<!--允许程序打开网络套接字-->
<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

第三步

添加jar包
一个高德搜索包,一个3D地图包
下载地址http://lbs.amap.com/api/android-sdk/download/
AMap_Search_V3.6.0_20161111.jar
Android_Map3D_SDK_V4.1.2_20161104.jar

第三步

在布局文件添加地图

<?xml version="1.0" encoding="utf-8"?>
 <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.boatt.gaodedemo.MainActivity">

<com.amap.api.maps.MapView
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</RelativeLayout>

第四步

自定义路线图

public class NewDrivingRouteOverlay extends DrivingRouteOverlay {
Context mContext;
public NewDrivingRouteOverlay(Context arg0, AMap arg1, DrivePath arg2,
                              LatLonPoint arg3, LatLonPoint arg4) {
    super(arg0, arg1, arg2, arg3, arg4);
    mContext = arg0;
}
//自定义结束位置marker
@Override
protected BitmapDescriptor getEndBitmapDescriptor() {
    return BitmapDescriptorFactory.fromBitmap(BitmapFactory
            .decodeResource(mContext.getResources(), R.mipmap.start));//此处添加你的图标
}
//自定义开始位置marker
@Override
protected BitmapDescriptor getStartBitmapDescriptor() {
    return BitmapDescriptorFactory.fromBitmap(BitmapFactory
            .decodeResource(mContext.getResources(), R.mipmap.end));//此处添加你的图标
}
//自定义路线颜色
@Override
protected int getDriveColor() {
    return Color.BLACK;
}
}

第五步

开始规划路线图

public class MainActivity extends AppCompatActivity implements RouteSearch.OnRouteSearchListener {
private MapView mMapView;
private RouteSearch routeSearch;
private AMap aMap;
private static final String TAG = "MainActivity";
private LatLonPoint latLonPoint1;
private LatLonPoint latLonPoint2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //获取地图控件引用
    mMapView = (MapView) findViewById(R.id.map);
    //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
    mMapView.onCreate(savedInstanceState);
    aMap = mMapView.getMap();
    routeSearch = new RouteSearch(this);
    routeSearch.setRouteSearchListener(this);
    latLonPoint1 = new LatLonPoint(31.075746, 121.503216);
    latLonPoint2 = new LatLonPoint(31.080069, 121.524986);
    RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(
            new RouteSearch.FromAndTo(latLonPoint1,
                    latLonPoint2), RouteSearch.DrivingDefault, null, null, "");
    routeSearch.calculateDriveRouteAsyn(query);
    Log.d(TAG, "onCreate: "+1);
    aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(
            new LatLng(31.075746,121.503216),new LatLng(31.080069, 121.524986)),20));
}

@Override
protected void onDestroy() {
    super.onDestroy();
    //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
    mMapView.onDestroy();
    Log.d(TAG, "onDestroy: "+4);
}

@Override
protected void onResume() {
    super.onResume();
    //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
    mMapView.onResume();
    Log.d(TAG, "onResume: "+2);
}

@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);
}

@Override
public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {

}

@Override
    public void onDriveRouteSearched(DriveRouteResult driveRouteResult, int i) {
    Log.d(TAG, "onDriveRouteSearched: "+3);
    DrivePath drivePath = driveRouteResult.getPaths().get(0);
    NewDrivingRouteOverlay drivingRouteOverlay = new NewDrivingRouteOverlay(this, aMap, drivePath, driveRouteResult.getStartPos(),
            driveRouteResult.getTargetPos());
    drivingRouteOverlay.setNodeIconVisibility(false);//隐藏转弯的节点
    drivingRouteOverlay.addToMap();
    drivingRouteOverlay.zoomToSpan();
    aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds(
            new LatLng(latLonPoint1.getLatitude(),latLonPoint1.getLongitude()),
            new LatLng(latLonPoint2.getLatitude(),latLonPoint2.getLongitude())),50));
}

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

}

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

}
}

最后补充

drivingRouteOverlay.setNodeIconVisibility(false);//隐藏转弯的节点
drivingRouteOverlay.addToMap();//把路线图添加到地图
drivingRouteOverlay.zoomToSpan();//在地图上显示路线图
aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(new LatLngBounds( new LatLng(latLonPoint1.getLatitude(),latLonPoint1.getLongitude()), new LatLng(latLonPoint2.getLatitude(),latLonPoint2.getLongitude())),50));}
//动态缩放地图大小,LatLngBounds:地图要显示的矩形大小,50:距离屏幕四周的padding值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,997评论 25 707
  • 【 申请密钥AndroidSDK:应用程序包名+数字签名 As查看数字签名:cmd-----cd .android...
    征程_Journey阅读 2,272评论 0 5
  • 项目中用到地图的地方越来越多,从O2O商城、出行、交通、单车等无处不在使用地图,以下是在多个项目中集成高德地图常用...
    倔强的炉包阅读 18,422评论 6 21
  • 今年我26了,谈了一场无疾而终的恋爱,基于此,我又成功地迈入了单身狗的行列。 我老妈比我老爸大了整整五岁,听说俩人...
    直愣愣的脑回路阅读 156评论 0 0