高德地图多点线路规划
来源:互联网 发布:java方法里面调用方法 编辑:程序博客网 时间:2024/05/16 18:00
private MapView map;
private AMap aMap;
private UiSettings uiSettings;
private CameraUpdate mUpdate;
private ArrayList<MapInfo> list,lists,jlist; //途经点集合
private ArrayList<LatLonPoint> list1;
private DriveRouteResult driveRouteResult;// 驾车模式查询结果
private int drivingMode = RouteSearch.DrivingDefault;// 驾车默认模式
private RouteSearch routeSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_map);
map = (MapView)findViewById(R.id.map);
map.onCreate(savedInstanceState);
//(模拟数据)得到途经点集合
list.add(new MapInfo("4", 39.8530620000, 116.3747240000, "鸿运水果烟酒超市", "详细地址详细地址5555"));
list.add(new MapInfo("6", 39.8516080000, 116.3734790000, "世纪华联超市", "详细地址详细地址7777"));
list.add(new MapInfo("10",39.844693, 116.369901, "鲜花婚庆水果", "详细地址详细地址1010"));
list.add(new MapInfo("12",39.84237, 116.381086, "街角蛋糕", "详细地址详细地址66666"));
list.add(new MapInfo("16",39.854152, 116.415689, "北京同仁堂第二中医院", "详细地址详细地址222"));
list.add(new MapInfo("17",39.860975, 116.412025, "北京市益华食品厂", "详细地址详细地址3333"));
initdata();//根据途经点到起点的距离进行排序
//得到途经点坐标
for (int i=0;i<list.size();i++){
list1.add(new LatLonPoint(list.get(i).getLat(),list.get(i).getLng()));
}
//InfoWindow 和 Marker 监听 以及线路规划监听
aMap.setOnMarkerClickListener(this);
routeSearch = new RouteSearch(this);
routeSearch.setRouteSearchListener(this);
final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(new LatLonPoint(39.854648,116.367852), new LatLonPoint(39.833673,116.387424)); //设置起点和终点
routeSearch.calculateDriveRouteAsyn(query);// 异步路径规划驾车模式查询
}
/**
* 根据途经点到起点的距离进行排序
*/
public void initdata(){
jlist=new ArrayList<>();
for (int i=0;i<list.size();i++){
MapInfo mapInfo=new MapInfo();
float[] results=new float[1];Location.distanceBetween(39.854648, 116.367852, list.get(i).getLat(), list.get(i).getLng(), results);
mapInfo.setJuli(results[0]);
mapInfo.setUid(list.get(i).getUid());jlist.add(mapInfo);
}
double temp;String str;
for(int i = jlist.size() - 1; i >= 0; i --) {
for (int j = 0; j < i; j++) {
if (jlist.get(j).getJuli() > jlist.get(j+1).getJuli()) {
temp = jlist.get(j).getJuli();
str=jlist.get(j).getUid();
jlist.get(j).setJuli(jlist.get(j + 1).getJuli());
jlist.get(j).setUid(jlist.get(j + 1).getUid());
jlist.get(j+1).setJuli(temp);
jlist.get(j+1).setUid(str);
}
}
}
lists=new ArrayList<>();
for (int i=0;i<jlist.size();i++){
String id=jlist.get(i).getUid();
for (int j=0;j<list.size();j++){
if(id.equals(list.get(j).getUid())){
lists.add(list.get(j));
}
}
}
}
/**
*将view转Bitmap
*/
public static Bitmap convertViewToBitmap(View view) { view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap;}
//在地图上画mark
private Marker drawMarkerOnMap(LatLng point, Bitmap markerIcon,Incomplete mapInfo) { if (aMap != null && point != null) { Marker marker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 1) .position(point) .title(id+"\n"+ mapInfo.getName) .snippet(mapInfo.getAddr()) .icon(BitmapDescriptorFactory.fromBitmap(markerIcon))); marker.showInfoWindow(); return marker; } return null;
/**
* 初始化map对象
*/
private void init() {
if (aMap == null) { aMap = map.getMap(); uiSettings = aMap.getUiSettings(); uiSettings.setZoomControlsEnabled(false); // 这是地理位置(经纬度) for (int i=0;i<lists.size();i++){ mUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition( new LatLng(lists.get(i).getLat(), lists.get(i).getLng()), 16, 0, 30)); // 定位的方法 aMap.moveCamera(mUpdate); } drawMarkers(); }
/**
* 自定义带数字的标注
*/
private void drawMarkers() {
for (int i = 0; i < lists.size(); i++) { if (lists.get(i).getLat()!=0.0&&lists.get(i).getLng()!=0.0) { View view = View.inflate(context,R.layout.marker_view, null); TextView mark_id = (TextView) view.findViewById(R.id.mark_id); mark_id.setText((i + 1) + ""); Bitmap bitmap = convertViewToBitmap(view); //窗口信息 drawMarkerOnMap(new LatLng(lists.get(i).getLat(), lists.get(i).getLng()), bitmap, lists.get(i)); }}}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
map.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
map.onPause();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
map.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
map.onDestroy();
}
//窗口监听回调
@Overridepublic void onInfoWindowClick(Marker marker) { Toast.makeText(IncompleteOrderMapActivity.this,marker.getTitle()+"\n"+marker.getSnippet(),Toast.LENGTH_SHORT).show(); }
//公交回调
@Override
public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {
}
//驾车回调
@Overridepublic void onDriveRouteSearched(DriveRouteResult result, int rCode) { if (rCode == 0) { if (result != null && result.getPaths() != null && result.getPaths().size() > 0) { driveRouteResult = result; DrivePath drivePath = driveRouteResult.getPaths().get(0); RouteTool routeTool= new RouteTool(IncompleteOrderMapActivity.this,aMap,drivePath,driveRouteResult.getStartPos(), driveRouteResult.getTargetPos()); routeTool.setView(Color.BLUE,6); routeTool.removeFromMap(); routeTool.addToMap(); routeTool.zoomToSpan(); } else { Toast.makeText(IncompleteOrderMapActivity.this,"对不起,没有搜索到相关数据!",Toast.LENGTH_SHORT).show(); } } else if (rCode == 27) { Toast.makeText(IncompleteOrderMapActivity.this,"搜索失败,请检查网络连接!",Toast.LENGTH_SHORT).show(); } else if (rCode == 32) { Toast.makeText(IncompleteOrderMapActivity.this,"key验证无效!",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(IncompleteOrderMapActivity.this,"未知错误,请稍后重试!错误码为"+rCode,Toast.LENGTH_SHORT).show(); }}
//步行回调
@Overridepublic void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {}
//标注监听回调
@Overridepublic boolean onMarkerClick(Marker marker) { marker.showInfoWindow(); return false;}
/**
* 自定义路线的颜色、宽度、小汽车标志
*/
class RouteTool extends DrivingRouteOverlay { int color;//路线颜色 float lineWidth;//路线宽度 // 修改路线宽度 @Override protected float getBuslineWidth() { return lineWidth; } // 修改路线颜色 @Override protected int getDriveColor() { return color; } public RouteTool(Context context, AMap aMap, DrivePath drivePath, LatLonPoint latLonPoint, LatLonPoint latLonPoint1) { super(context, aMap, drivePath, latLonPoint, latLonPoint1); } /*修改起点marker样式*/ @Override protected BitmapDescriptor getStartBitmapDescriptor() { BitmapDescriptor reBitmapDescriptor=new BitmapDescriptorFactory().fromResource(R.drawable.icon_qi); return reBitmapDescriptor; } /*修改中间点marker样式*/ @Override protected BitmapDescriptor getDriveBitmapDescriptor() { BitmapDescriptor reBitmapDescriptor=new BitmapDescriptorFactory().fromResource(R.drawable.no2); return reBitmapDescriptor; } /*修改终点marker样式*/ @Override protected BitmapDescriptor getEndBitmapDescriptor() { BitmapDescriptor reBitmapDescriptor=new BitmapDescriptorFactory().fromResource(R.drawable.icon_zh); return reBitmapDescriptor; } // 一个工具方法,修改颜色和宽度 public void setView(int color ,float width) { this.color=color; this.lineWidth=width; }}
}
- 高德地图多点线路规划
- 高德地图---线路规划查询/正向地理编码/地图覆盖物
- 高德地图 android 开发 路线规划 自定义 修改线路颜色和宽度
- 高德地图之反地理编码、线路规划、天气查询
- 高德地图线路规划的接入使用(步行-公交-驾车)
- 高德地图实现多点标注功能
- 高德地图实现多点连线功能
- 高德地图实现多点连线功能
- 高德地图多点标记 marker JSAPI
- 高德地图路径规划
- 高德地图路线规划
- JS 实现GOOGLE地图线路规划
- android 百度地图线路规划问题
- 高德地图初步使用-多点路线连接
- 高德地图v1.3 javascript API 多点标注
- 百度地图自定义多点规划路线
- 高德地图04--路径规划
- 高德地图——路线规划
- spring 全注解 扫包问题
- Activity的生命周期
- 用java做一个最小的操作系统内核
- unbuntu配置tomcat的startup.sh文件
- Spring MVC 传入List参数的接收问题
- 高德地图多点线路规划
- Android Fragment 深度解析
- BZOJ2632: [neerc2011]Gcd guessing game
- #linux初次总结(简单操作)
- 最糟糕的秘密——扎克伯格或许不是一个编程天才?
- sql的left join中where条件放哪儿?
- php对象转数组
- 《传统文化与中医养生》笔记 2
- Java语言对对象引用的4种方式