您的位置:首页 > 移动开发 > Android开发

安卓百度地图基本配置及画线路轨迹问题

2016-06-27 13:46 459 查看

配置百度地图进行经纬度的定位和画折线图轨迹以及百度地图控件和ScrollView滑动冲突的问题解决。

首先按照百度地图的API把jar包还有主配置文件还有百度key这些基本配置都给加上,确保key值是正确的。
解决百度地图控件和ScrollView滑动冲突问题,上代码:
// 解决地图拖动和ScrollView上下滑动冲突问题
View v = mMapView.getChildAt(0);
v.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_UP) {
scrollView.requestDisallowInterceptTouchEvent(false);
} else {
scrollView.requestDisallowInterceptTouchEvent(true);
}
return false;
}
});


在地图中心显示指定的经纬度并添加marker
//获取到的经纬度
double latt = Double.parseDouble(sp.getString("Lat", ""));
double lngg = Double.parseDouble(sp.getString("Lng", ""));
//经纬度对应的地址
final String address1 = sp.getString("address", "");
// 定义Maker坐标点
LatLng point = new LatLng(lngg, latt);
// 构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_gcoding);
// 构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(point)
.icon(bitmap).zIndex(8).draggable(true);
float f = mBaiduMap.getMaxZoomLevel();// 19.0 最小比例尺
// 设置当前位置显示在地图中心
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(point, f - 5);// 设置缩放比例
mBaiduMap.animateMapStatus(u);
// 在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
//点击Marker弹出地址名称
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {

@Override
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
Toast.makeText(CarStateActivity.this, address1,
Toast.LENGTH_SHORT).show();
return true;
}
});
效果如图:




多个Marker同时显示的代码,以折线图轨迹的起点和终点为例:
// 起点位置
LatLng geoPoint = new LatLng(latstart, lngstart);
// 构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_st);
// 构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(geoPoint)
.icon(bitmap).zIndex(8).draggable(true);

// 终点位置
LatLng geoPoint1 = new LatLng(latend, lngend);
// 构建Marker图标
BitmapDescriptor bitmap1 = BitmapDescriptorFactory
.fromResource(R.drawable.icon_en);
// 构建MarkerOption,用于在地图上添加Marker
OverlayOptions option1 = new MarkerOptions().position(geoPoint1)
.icon(bitmap1).zIndex(8).draggable(true);
// 在地图上添加Marker,并显示

List<OverlayOptions> overlay = new ArrayList<OverlayOptions>();
overlay.add(option);
overlay.add(option1);
mBaiduMap.addOverlays(overlay);


画折线图:
List<LatLng> latLngPolygon = new ArrayList<LatLng>();
public void drawStart() throws JSONException {

//向latLngPolygon中添加获取到的所有坐标点

for (int i = 0; i < json_data.length(); i++) {
JSONObject jsonStart = json_data.getJSONObject(i);
String lngStart = jsonStart.getString("lng");
String latStart = jsonStart.getString("lat");
double latstart = Double.valueOf(latStart);
double lngstart = Double.valueOf(lngStart);
LatLng pt1 = new LatLng(latstart, lngstart);
latLngPolygon.add(pt1);
}
//获取起点和终点以及计算中心点
JSONObject jsonStart = json_data.getJSONObject(0);
String lngStart = jsonStart.getString("lng");
String latStart = jsonStart.getString("lat");
double latstart = Double.valueOf(latStart);
double lngstart = Double.valueOf(lngStart);
JSONObject jsonEnd = json_data.getJSONObject(json_data.length() - 1);
String lngEnd = jsonEnd.getString("lng");
String latEnd = jsonEnd.getString("lat");
double latend = Double.valueOf(latEnd);
double lngend = Double.valueOf(lngEnd);

final double midlat = (latstart + latend) / 2;
final doubl
9600
e midlon = (lngstart + lngend) / 2;
LatLng point = new LatLng(midlat, midlon);// 中点
LatLng point1 = new LatLng(latstart, lngstart);// 起点
LatLng point2 = new LatLng(latend, lngend);// 终点

//地图缩放等级
int zoomLevel[] = { 2000000, 1000000, 500000, 200000, 100000, 50000,
25000, 20000, 10000, 5000, 2000, 1000, 500, 100, 50, 20, 0 };
// 计算两点之间的距离,重新设定缩放值,让全部marker显示在屏幕中。
int jl = (int) DistanceUtil.getDistance(point1, point2);

int i;
for (i = 0; i < 17; i++) {
if (zoomLevel[i] < jl) {
break;
}
}
//根据起点和终点的坐标点计算出距离来对比缩放等级获取最佳的缩放值,用来得到最佳的显示折线图的缩放等级
float zoom = i + 2;
// 设置当前位置显示在地图中心
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(point, zoom);// 设置缩放比例
mBaiduMap.animateMapStatus(u);

/**
* 创建自定义overlay
*/
// 起点位置 LatLng geoPoint = new LatLng(latstart, lngstart); // 构建Marker图标 BitmapDescriptor bitmap = BitmapDescriptorFactory .fromResource(R.drawable.icon_st); // 构建MarkerOption,用于在地图上添加Marker OverlayOptions option = new MarkerOptions().position(geoPoint) .icon(bitmap).zIndex(8).draggable(true); // 终点位置 LatLng geoPoint1 = new LatLng(latend, lngend); // 构建Marker图标 BitmapDescriptor bitmap1 = BitmapDescriptorFactory .fromResource(R.drawable.icon_en); // 构建MarkerOption,用于在地图上添加Marker OverlayOptions option1 = new MarkerOptions().position(geoPoint1) .icon(bitmap1).zIndex(8).draggable(true); // 在地图上添加Marker,并显示 List<OverlayOptions> overlay = new ArrayList<OverlayOptions>(); overlay.add(option); overlay.add(option1); mBaiduMap.addOverlays(overlay);

//开始绘制
drawMyRoute(latLngPolygon);

}
/**
* 根据数据绘制轨迹
*
* @param points2
*/
protected void drawMyRoute(List<LatLng> points2) {
OverlayOptions options = new PolylineOptions().color(0xAAFF0000)
.width(10).points(points2);
mBaiduMap.addOverlay(options);
}

效果如图:





设置默认的地图显示的坐标点,不加marker:
// 定义默认坐标点(该坐标默认西安)
LatLng point = new LatLng(34.267, 108.9);
// 设置当前位置显示在地图中心
float f = mBaiduMap.getMaxZoomLevel();// 19.0 最小比例尺
MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(point, f-10);// 设置缩放比例
mBaiduMap.animateMapStatus(u);


百度地图手势操作设置:
//设置地图相关手势禁用
mUiSettings = mBaiduMap.getUiSettings();
//禁用旋转
mUiSettings.setRotateGesturesEnabled(false);
//禁用俯视
mUiSettings.setOverlookingGesturesEnabled(false);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息