本文主要介绍百度地图图层相关的功能和接口,以及使用方法。
百度地图SDK提供了3种类型的地图资源:
MapView
在应用中显示地图。BaiduMap
是用来定义地图对象的操作方法与接口。
图层类型常量 | 说明 |
---|---|
MAP_TYPE_NORMAL | 普通地图(包含3D地图) |
MAP_TYPE_SATELLITE | 卫星图 |
MAP_TYPE_NONE | 空白地图 |
类型 | 方法 | 说明 |
---|---|---|
int | getMapType() |
获取地图当前类型 |
void | setMapType(int type) |
设置地图类型 |
void | setMapBackgroundColor(int color) |
设置空白底图颜色 |
严重拥堵
、拥堵
,缓行
,畅通
。类型 | 方法 | 说明 |
---|---|---|
boolean | isTrafficEnabled() |
获取是否打开交通图层 |
void | setTrafficEnable(boolean enabled) |
设置是否打开交通图层 |
void | 设置路况颜色 |
注:setCustomTrafficColor
最新版本改方法标注为Deprecated
。
类型 | 方法 | 说明 |
---|---|---|
boolean | isSupportBaiduHeatMap() |
查询当前图区是否支持百度热力图 |
boolean | isBaiduHeatMapEnabled() |
获取是否打开百度热力图层(百度自有数据图层) |
void | setBaiduHeatMapEnabled(boolean enabled) |
设置是否打开热力图图层 |
自定义MapStyle
类,实现以下方法。
public class MapStyle {
private final BaiduMap map;
MapStyle(MapView mapView) {
map = mapView.getMap();
}
// TODO 添加地图底图类型方法
// TODO 添加实时路况
// TODO 添加百度热力地图
}
地图底图类型
/**
* 是否为普通地图
*/
public boolean isNormal() {
return map.getMapType() == BaiduMap.MAP_TYPE_NORMAL;
}
/**
* 设置普通地图
*/
public void setNormal() {
map.setMapType(BaiduMap.MAP_TYPE_NORMAL);
}
/**
* 是否为卫星图
*/
public boolean isSatellite() {
return map.getMapType() == BaiduMap.MAP_TYPE_SATELLITE;
}
/**
* 设置卫星图
*/
public void setSatellite() {
map.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
}
/**
* 是否为空白地图
*/
public boolean isBlank() {
return map.getMapType() == BaiduMap.MAP_TYPE_NONE;
}
/**
* 设置空白地图
*/
public void setBlank() {
map.setMapType(BaiduMap.MAP_TYPE_NONE);
}
/**
* 设置空白地图底图颜色
* @param color 地图背景色
*/
public void setBlank(int color) {
map.setMapType(BaiduMap.MAP_TYPE_NONE);
map.setMapBackgroundColor(color);
}
实时路况
/**
* 获取是否打开交通图层
* @return 是否打开交通图层
*/
public boolean isTrafficEnabled() {
return map.isTrafficEnabled();
}
/**
* 设置是否打开交通图层
* @param enabled 是否打开交通图层
*/
public void setTrafficEnable(boolean enabled) {
map.setTrafficEnabled(enabled);
}
/**
* 自定义路况图主题
* 若有参数为null或空字符串时,路况为默认样式.
* @param severeCongestion 严重拥堵
* @param congestion 拥堵
* @param slow 缓行
* @param smooth 畅通
*/
@Deprecated
public void setTrafficTheme(String severeCongestion,
String congestion,
String slow,
String smooth) {
map.setTrafficEnabled(true);
map.setCustomTrafficColor(severeCongestion, congestion, slow, smooth);
// 对地图状态做更新,否则可能不会触发渲染,造成样式定义无法立即生效。
MapStatusUpdate update = MapStatusUpdateFactory.zoomTo(13);
map.animateMapStatus(update);
}
百度热力地图
/**
* 查询当前图区是否支持百度热力图
* @return
*/
public boolean isSupportHeatMap() {
return map.isSupportBaiduHeatMap();
}
/**
* 获取是否打开百度热力图层(百度自有数据图层)
* @return 是否打开百度热力图层(百度自有数据图层)
*/
public boolean isHeatMapEnable() {
return map.isBaiduHeatMapEnabled();
}
/**
* 设置是否打开热力图图层
* 百度自有数据图层,地图层级大于11时,可显示热力图
* @param enabled 是否打开热力图图层
*/
public void setHeatMapEnabled(boolean enabled) {
map.setBaiduHeatMapEnabled(enabled);
}
<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.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:clickable="true"
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/bmapView">
<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/none"
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/heatMap"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="setHeatMap"
android:text="热力图"
android:textColor="@color/white"
android:textStyle="bold" />
<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();
int id = view.getId();// 普通图
if (id == R.id.normal) {
if (checked) {
mapStyle.setNormal();
}
// 卫星图
} else if (id == R.id.statellite) {
if (checked) {
mapStyle.setSatellite();
}
// 空白地图
} else if (id == R.id.none) {
if (checked) {
mapStyle.setBlank();
}
}
}
实时路况
/**
* 设置是否显示交通图
*/
public void setTraffic(View view) {
mapStyle.setTrafficEnable(((CheckBox) view).isChecked());
}
百度城市热力图
/**
* 设置是否显示热力图
*/
public void setHeatMap(View view) {
mapStyle.setHeatMapEnabled(((CheckBox) view).isChecked());
}