腾讯地图SDK Android版开发 3 地图图层
前言
本文主要介绍腾讯地图图层相关的功能和接口,以及使用方法。
腾讯地图图层
地图底图类型
- 普通地图
- 普通地图的信息包括精细的面区域信息,道路信息、建筑物及重要的POI(兴趣点–地图上的图标及文字)
- 卫星图
- 暗色地图
地图类
- 腾讯地图有两个重要的类,一个是地图视图类,一个是地图类。
- 在前文中,通过创建
TextureMapView
在应用中显示地图。 - 这里介绍下地图类的地图底图、路况相关的接口。
- 腾讯地图官方介绍
TencentMap
是地图实例,创建地图视图成功之后,通过视图对象可以直接获取地图实例。 - 下图列举了相关的接口。
图层类型常量
图层类型常量 | 说明 |
---|---|
MAP_TYPE_NORMAL | 普通地图 |
MAP_TYPE_SATELLITE | 卫星图 |
MAP_TYPE_DARK | 暗色模式 |
接口
类型 | 方法 | 说明 |
---|---|---|
int | getMapType() | 获取地图当前类型 |
void | setMapType(int type) | 设置地图类型 |
路况图层
腾讯地图SDK还提供了实时路况图层,可以为提供实时交通数据的城市展示实时交通状况。
接口
类型 | 方法 | 说明 |
---|---|---|
boolean | isTrafficEnabled() | 获取是否打开交通图层 |
void | setTrafficEnable(boolean enabled) | 设置是否打开交通图层 |
示例代码
地图风格类
自定义MapStyle
类,实现以下方法。
package com.example.mapdemo;
import com.tencent.tencentmap.mapsdk.maps.TencentMap;
import com.tencent.tencentmap.mapsdk.maps.TextureMapView;
public class MapStyle {
TencentMap map;
MapStyle(TextureMapView mapView) {
map = mapView.getMap();
}
// TODO 添加地图底图类型方法
// TODO 添加实时路况方法
}
地图底图类型
/**
* 是否为普通地图
*/
public boolean isNormal() {
return map.getMapType() == map.MAP_TYPE_NORMAL;
}
/**
* 设置普通地图
*/
public void setNormal() {
map.setMapType(map.MAP_TYPE_NORMAL);
}
/**
* 是否为卫星图
*/
public boolean isSatellite() {
return map.getMapType() == map.MAP_TYPE_SATELLITE;
}
/**
* 设置卫星图
*/
public void setSatellite() {
map.setMapType(map.MAP_TYPE_SATELLITE);
}
/**
* 是否为夜景地图
*/
public boolean isNight() {
return map.getMapType() == map.MAP_TYPE_DARK;
}
/**
* 设置夜景地图
*/
public void setNight() {
map.setMapType(map.MAP_TYPE_DARK);
}
实时路况
/**
* 获取是否打开交通图层
* @return 是否打开交通图层
*/
public boolean isTrafficEnabled() {
return map.isTrafficEnabled();
}
/**
* 设置是否打开交通图层
* @param enabled 是否打开交通图层
*/
public void setTrafficEnable(boolean enabled) {
map.setTrafficEnabled(enabled);
}
页面布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.tencent.tencentmap.mapsdk.maps.TextureMapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@id/bottomView"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/bottomView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/mapview">
<RadioGroup
android:id="@+id/RadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/background_dark"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:paddingHorizontal="20dp">
<RadioButton
android:id="@+id/normal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="true"
android:onClick="setMapMode"
android:text="普通地图"
android:textColor="@color/white"
android:textStyle="bold" />
<RadioButton
android:id="@+id/statellite"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="setMapMode"
android:text="卫星地图"
android:textColor="@color/white"
android:textStyle="bold" />
<RadioButton
android:id="@+id/night"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="setMapMode"
android:text="夜景地图"
android:textColor="@color/white"
android:textStyle="bold" />
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center"
android:background="@android:color/background_dark"
android:orientation="horizontal"
android:paddingHorizontal="20dp">
<CheckBox
android:id="@+id/traffice"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="false"
android:onClick="setTraffic"
android:text="路况图"
android:textColor="@color/white"
android:textStyle="bold" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
控件响应事件
地图底图类型
/**
* 设置底图显示模式
*/
public void setMapMode(View view) {
boolean checked = ((RadioButton) view).isChecked();
if (!checked)
return;
int id = view.getId();
if (id == R.id.normal) {
// 普通图
mapStyle.setNormal();
} else if (id == R.id.statellite) {
// 卫星图
mapStyle.setSatellite();
} else if (id == R.id.night) {
// 夜景地图
mapStyle.setNight();
}
}
实时路况
/**
* 设置是否显示交通图
*/
public void setTraffic(View view) {
mapStyle.setTrafficEnable(((CheckBox) view).isChecked());
}