安卓百度地图基本配置及画线路轨迹问题
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);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories