最近在做关于地图的项目,这里将用到的关于地图SDK的相关方法做一个总结归纳。
初始化
SDKInitializer.initialize(Context)
复制代码
MapView 与 BaiduMap
简单配置
mapView.showScaleControl(showScaleControl);//是否显示比例尺
mapView.showZoomControls(showZoomControl);//是否显示缩放按钮
baiduMap.setCompassEnable(compassEnable);//是否显示指南针
baiduMap.setTrafficEnabled(boolean enabled)//设置是否打开交通图层
baiduMap.showMapPoi(false);//是否显示地图标注(各种道路地点等)
//设置中心坐标与缩放比例
//地点坐标可以在以下网址获得http://api.map.baidu.com/lbsapi/getpoint/index.html
//默认北京天安门的坐标,缩放等级最大为4
LatLng center = new LatLng(latitude, longitude);
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(center);
if (4 <= zoom && zoom <= 20) {
builder.zoom(zoom);
}
MapStatus mapStatus = builder.build();
baiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));
复制代码/**
* 地图显示区域
*
* @param latLng 判断改点是否在屏幕中,若不在则地图缩放至能包含该点
*/
public void setMapCenterBounds(LatLng latLng){
//当前地图区域不包含这个点,则需要缩放
boolean needZoom = !baiduMap.getMapStatus().bound.contains(latLng);
if (needZoom) {
LatLngBounds.Builder latLngBuilder = new LatLngBounds.Builder();
latLngBuilder.include(latLng);
//更新显示区域
baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLngBounds(latLngBuilder.build()));
//缩放一倍,留出边界
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomBy(-1f);
baiduMap.setMapStatus(mapStatusUpdate);
}
}
//如果是需要显示一个集合中的所有坐标点,则只需遍历该集合并且连续调用include(Latlng latlng)即可
复制代码
MapView:
用来显示地图的控件,手势识别由该View处理,同时该View的生命周期应该与Activity或Fragment同步
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
复制代码
addView():
基于屏幕坐标或者经纬度添加一个View,这里的坐标指定的是View的左下角坐标
Point point = new Point(50,240);
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
imageView.setImageDrawable(getResources().getDrawable(R.drawable.huaji));
imageView.setBackgroundColor(Color.BLACK);
MapViewLayoutParams params = new MapViewLayoutParams.Builder()
.layoutMode(MapViewLayoutParams.ELayoutMode.absoluteMode)//添加View以屏幕坐标为准
.point(point)//屏幕坐标
// .layoutMode(MapViewLayoutParams.ELayoutMode.mapMode) //添加View以经纬度坐标为准
// .position(new LatLng(31.1519, 121.555972))//经纬度坐标
.align(MapViewLayoutParams.ALIGN_LEFT,MapViewLayoutParams.ALIGN_BOTTOM)//对其方式,(x方向,y方向)
.height(300)//高
.width(200)//宽
.yOffset(0)//y方向偏移量
.build();
mMapView.addView(imageView,params);
复制代码
inRangeOfView(float x, float y)
判断当前触摸点是否在地图上,返回boolean
BaiduMap:
地图控制器-手势监听、添加覆盖物、控制地图各种相关参数
setMapType(int type)
设置地图模式
BaiduMap.MAP_TYPE_NORMAL 普通图
BaiduMap.MAP_TYPE_SATELLITE 卫星图
BaiduMap.MAP_TYPE_NONE 卫星图
addOverlay(OverlayOptions options)、addOverlays(java.util.List options)
添加覆盖物
//绘制多个点
List points = new ArrayList<>();
points.add(new LatLng(31.153517, 121.553807));
points.add(new LatLng(31.154073, 121.556924));
points.add(new LatLng(31.15123, 121.557688));
points.add(new LatLng(31.150727, 121.554571));
//点的纹理图片
BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.icon_mark1);
List markerOptions = new ArrayList<>();
//循环设置各个点的位置及纹理
for (int i = 0; i < points.size(); i++) {
markerOptions.add(new MarkerOptions()
.extraInfo(new Bundle())//传递相关数据,在点击事件OnMarkerClickListener回调中可以获取该信息
.position(points.get(i))
.icon(icon));
}
//添加所有的点
List overLays=mBaiduMap.addOverlays(markerOptions);
//若要移除这些点(不要和集合的remove()搞混了)
//for (Overlay overlay : overlays) {
//