安卓百度地图(二)定位显示,离线地图的下载使用与地图的交互
其他文章:
安卓百度离线地图的下载以及使用
安卓百度地图(一)定位功能的实现、周边POI的检索
安卓百度地图(三)绘制点、线等图层信息
安卓百度地图(四)城市,周边,区域检索
安卓百度地图(五)百度地图路线规划
安卓百度地图(六)鹰眼轨迹的上传,历史轨迹的显示
安卓百度地图(七)地理围栏的建立与使用
本文主要针对百度地图的显示,以及离线地图的下载使用
一 地图SDk简介
百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。
二 地图显示
XML:
<com.baidu.mapapi.map.TextureMapView
android:id="@+id/mTexturemap"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.baidu.mapapi.map.TextureMapView>
Java:
注意:不要忘记SDKInitializer.initialize(getApplicationContext());
private TextureMapView mMapView;
private BaiduMap mBaiduMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_map);
mMapView = (TextureMapView) findViewById(R.id.mTexturemap);
mBaiduMap = mMapView.getMap();
}
2.1 切换地图类型
百度地图SDK为您提供了3种类型的地图资源(普通矢量地图、卫星图和空白地图),BaiduMap 类提供图层类型常量,详细如下:
类型名称 | 说明 |
---|---|
MAP_TYPE_NORMAL | 普通地图(包含3D地图) |
MAP_TYPE_SATELLITE | 卫星图 |
MAP_TYPE_NONE | 空白地图 |
通过mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
可以切换地图类型
通过mBaiduMap.setBaiduHeatMapEnabled(true)
开启百度城市热力图
三 定位显示
注意:设置返回的坐标类型为bd09ll
,否则无法直接在地图上显示
LocationClientOption mOption = new LocationClientOption();
mOption.setCoorType("bd09ll");
mLocationClient.setLocOption(mOption);
3.1 设置中心点,显示比例
开启定位后,然后在得到保存地理位置信息的bdLocation后,我们进入地图通常有一个中心点,百度地图默认为北京天安门。因为我们这里需要显示定位当当前位置,所以需要自己设置中心点,以及地图显示比例。
因为我们只需要在首次进入地图时,设置中心点:
private boolean is_First_locate = true;
if (is_First_locate) {
is_First_locate = false;
LatLng ll = new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
//设置缩放中心点;缩放比例;
builder.target(ll).zoom(18.0f);
//给地图设置状态
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
3.2 定位当前位置
3.2.1 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
3.2.2 根据经纬度定位到当前位置
MyLocationData locationData = new MyLocationData.Builder()
//设置精度圈
.accuracy(bdLocation.getRadius())
//设置方向
.direction(bdLocation.getDirection())
.latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude())
.build();
mBaiduMap.setMyLocationData(locationData);
3.2.3 自定义图标,定位模式等
三种定位模式:
类型名称 | 说明 |
---|---|
FOLLOWING | 跟随态,保持定位图标在地图中心 |
NORMAL | 普通态:更新定位数据时不对地图做任何操作 |
COMPASS | 罗盘态,显示定位方向圈,保持定位图标在地图中心 |
//设置定位模式(遇到一个问题,设置定位模式为非普通太出现问题)
MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL;
//自定义定位图标
BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory .fromResource(R.drawable.arrow);
//保存自定义样式(定位模式,是否开启方向,自定义图标样式,自定义精度圈填充颜色,自定义精度圈边框颜色)
MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker,0xAAFFFF88,0xAA00FF00);
mBaiduMap.setMyLocationConfiguration(config);//设置自定义样式
四 离线的图的下载使用
关于百度地图的离线下载及使用请移步安卓百度离线地图的下载以及使用
五 地图交互
5.1 地图控件
百度地图logo的显示位置、指南针的显隐、比例尺的显隐、缩放按钮的显隐。
//地图Logo默认在左下角显示,不可以移除,地图Logo不允许遮挡.
mMapView.setLogoPosition(LogoPosition.logoPostionleftBottom);
//可通过以下方法可以设置地图边界区域,来避免地图Logo遮挡。
mBaiduMap.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
//指南针默认为开启状态,可以关闭显示 。设置方法如下:
mUiSettings = mBaiduMap.getUiSettings();
//实例化UiSettings类对象
mUiSettings.setCompassEnabled(enable);
//比例尺默认为开启状态,可以关闭显示。设置方法如下:
mMapView. showScaleControl(enable);
//可通过mMapView.getMapLevel获取当前地图级别下比例尺所表示的距离大小。
mBaiduMap.setMaxAndMinZoomLevel(float max, float min);
//通过如下方式控制缩放按钮是否显示:
mMapView. showZoomControls(enable);
5.2 地图手势
地图平移的开关、缩放手势的开关、3D功能的开关、地图旋转的开关、禁止所有手势的开关。
//控制是否启用或禁用平移的功能,默认开启mUisettings. setScrollGesturesEnabled(enabled);
//控制是否启用或禁用缩放手势,默认开启mUisettings. setZoomGesturesEnabled(enabled);
//控制是否启用或禁用俯视(3D)功能,默认开启
mUisettings. setOverlookingGesturesEnabled(enabled);
//控制是否启用或禁用地图旋转功能,默认开启
mUisettings .setRotateGesturesEnabled(enabled);
//控制是否一并禁止所有手势,默认关闭。
mUisettings .setAllGesturesEnabled(enabled)
5.3 地图事件交互
百度地图事件交互:key验证时间监听、广播监听、地图事件监听(地图状态改变、各种手势、单击、双击截屏)等。详情查看官网百度地图事件交互
下面做简单介绍:
5.3.1 单击事件
OnMapClickListener listener = new OnMapClickListener() {
/**
* 地图单击事件回调函数
* @param point 点击的地理坐标
*/
public void onMapClick(LatLng point){
}
/**
* 地图内 Poi 单击事件回调函数
* @param poi 点击的 poi 信息
*/
public boolean onMapPoiClick(MapPoi poi){
}
};
5.3.2 双击事件
OnMapDoubleClickListener listener = new OnMapDoubleClickListener() {
/**
* 地图双击事件监听回调函数
* @param point 双击的地理坐标
*/
public void onMapDoubleClick(LatLng point){
}
};
5.3.3 地图长按事件监听接口:
OnMapLongClickListener listener = new OnMapLongClickListener() {
/**
* 地图长按事件监听回调函数
* @param point 长按的地理坐标
*/
public void onMapLongClick(LatLng point){
}
};
5.3.4 地图 Marker 覆盖物点击事件监听接口:
OnMarkerClickListener listener = new OnMarkerClickListener() {
/**
* 地图 Marker 覆盖物点击事件监听函数
* @param marker 被点击的 marker
*/
public boolean onMarkerClick(Marker marker){
}
};
5.3.5 地图定位图标点击事件监听接口:
OnMyLocationClickListener listener = new OnMyLocationClickListener() {
/**
* 地图定位图标点击事件监听函数
*/
public boolean onMyLocationClick(){
}
};
5.3.6 地图截屏回调接口:
SnapshotReadyCallback callback = new SnapshotReadyCallback() {
/**
* 地图截屏回调接口
* @param snapshot 截屏返回的 bitmap 数据
*/
public void onSnapshotReady(Bitmap snapshot){
}
};
5.4 地图方法交互
百度地图方法交互:改变地图缩放等级、设置地图操作区距屏幕的距离、设置地图显示范围、 改变地图类型和控件显示状态、改变地图手势的中心点、隐藏底图标注等。详情查看官网百度地图事件交互
本文主要做于收集整理笔记使用,关于文章的源码,请移步我的GitHub