// 解决地图拖动和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 double 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);// 设置缩放比例
mBaid