Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理

先扔一些高德原有UI的更改占坑.

//更改系统原有定位图标 MyLocationStyle myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationIcon(BitmapDescriptorFactory .fromResource(R.drawable.gps_point)); // 设置小蓝点的图标 myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0)); // 设置圆形的边框颜色 myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0)); // 设置圆形的填充颜色 myLocationStyle.strokeWidth(0f); // 设置圆形的边框粗细 aMap.setMyLocationStyle(myLocationStyle); //获取高德地图控件设置对象 mUiSettings = aMap.getUiSettings(); mUiSettings.setZoomControlsEnabled(false); //隐藏放大 缩小 按钮 mUiSettings.setMyLocationButtonEnabled(false); //隐藏原有定位按钮 mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER); //高德logo位置的移动


功能一:如何添加marker,添加一个和批量添加
1添加单个marker
MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(new LatLng(dlat, dlong)); //参数为想要添加marker位置的经纬度 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap)); //参数为想要展示的图标 aMap.addMarker(markerOptions); //将marker添加到地图上


【Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理】2批量添加marker

第一步添加marker到地图上: for (int i = 0; i < dataList.size(); i++) {//此处dataList是存有想要添加marker点的集合 MarkerOptions markerOptions = new MarkerOptions(); //初始化 MarkerOptions对象 markerOptions.position(new LatLng(目标点纬度, 目标点经度)); markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap)); //设置marker图标 markerOptionlist.add(markerOptions); } //第二个参数是设置是否移动到屏幕中心,FALSE是不移动 //添加到地图上,返回所有marker的集合 markerList = aMap.addMarkers(markerOptionlist, false); //添加到地图上,返回所有marker的集合 第二步设置marker监听 //设置market 点击事件 aMap.setOnMarkerClickListener(markerClickListener); // 定义 Marker 点击事件监听 AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() { // marker 对象被点击时回调的接口 // 返回 true 则表示接口已响应事件,否则返回false @Override public boolean onMarkerClick(Marker marker) { //markerList即为添加到地图上返回的marker集合 for (int i = 0; i < markerList.size(); i++) { if (marker.equals(markerList.get(i))) { //已找到你所点击的marker,接下来进行你想要的操作 return true; } } return false; };

功能二:如何添加路线和清除路线(步行路线为例)
1 绘制路线到地图上 class A implements RouteSearch.OnRouteSearchListener{//我自己的步行路线封装类 private void walkRouteSearch() {mStartPoint = new LatLonPoint(lastLat, lastLon); //路线起点 mEndPoint = new LatLonPoint(lastLat, lastLon); //路线终点 mRouteSearch = new RouteSearch(activity); mRouteSearch.setRouteSearchListener(this); //类A已实现OnRouteSearchListener searchRouteResult(Constant.ROUTE_TYPE_WALK, RouteSearch.WalkDefault); }/** * 开始搜索路径规划方案 */ public void searchRouteResult(int routeType, int mode) { try {if (mStartPoint == null) {Utils.ToastUtils(mContext, "定位中,稍后再试..."); return; } if (mEndPoint == null) {Utils.ToastUtils(mContext, "终点未设置"); } final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo( mStartPoint, mEndPoint); if (routeType == Constant.ROUTE_TYPE_WALK) {// 步行路径规划 RouteSearch.WalkRouteQuery query = new RouteSearch.WalkRouteQuery(fromAndTo, mode); mRouteSearch.calculateWalkRouteAsyn(query); // 异步路径规划步行模式查询 }} catch (Exception e) { Utils.LogUtils("1Exception: " + e.toString()); }} //RouteOverlay 更改路线颜色 宽度等 RouteOverlay routeOverlay; public WalkRouteOverlay walkRouteOverlay; @Override public void onWalkRouteSearched(WalkRouteResult result, int errorCode) {if (walkRouteOverlay != null) { List allPolyLines = walkRouteOverlay.allPolyLines; for (Polyline polyline : allPolyLines) { polyline.remove(); } }try { if (errorCode == AMapException.CODE_AMAP_SUCCESS) { if (result != null && result.getPaths() != null) { if (result.getPaths().size() > 0) { mWalkRouteResult = result; final WalkPath walkPath = mWalkRouteResult.getPaths() .get(0); //该对象在移除路线时有大用处 walkRouteOverlay = new WalkRouteOverlay( activity, aMap, walkPath, mWalkRouteResult.getStartPos(), mWalkRouteResult.getTargetPos()); //walkRouteOverlay.zoomToSpan(); //镜头移动到当前视角 //walkRouteOverlay.setNodeIconVisibility(false); //去掉沿途标志图标 //walkRouteOverlay.removeFromMap(); //去掉路线上所有markers,包括起点终点图标 walkRouteOverlay.addToMap(); } else if (result != null && result.getPaths() == null) { Utils.ToastUtils(mContext, "no_result"); } } else { Utils.ToastUtils(mContext, "no_result"); } } else { Utils.ToastUtils(mContext, "errorCode: " + errorCode); } } catch (Exception e) { Utils.LogUtils("2Exception: " + e.toString()); } }2 更改路线宽度、颜色以及清除路线 // 更改路线宽度和颜色 //此处用到两个类WalkRouteOverlay 和RouteOverlay //其中WalkRouteOverlay extends RouteOverlay,是它的子类 点开RouteOverlay类,找到 protected float getRouteWidth() {//修改返回值设置路线宽度 return 5f; }protected int getWalkColor() {//修改返回值设置路线颜色 return Color.parseColor("#5ac0f3"); } 移除路线 上面将路线添加到地图上时:walkRouteOverlay.addToMap(); 调用WalkRouteOverlay类中的方法: //此处为WalkRouteOverlay类,类中用不到的方法已省略 public class WalkRouteOverlay extends RouteOverlay {private PolylineOptions mPolylineOptions; private BitmapDescriptor walkStationDescriptor= null; private WalkPath walkPath; ...............此处省略用不到代码............./** * 添加步行路线到地图中。 * @since V2.1.0 */ public void addToMap() {initPolylineOptions(); try { List walkPaths = walkPath.getSteps(); mPolylineOptions.add(startPoint); for (int i = 0; i < walkPaths.size(); i++) { WalkStep walkStep = walkPaths.get(i); LatLng latLng = AMapServicesUtil.convertToLatLng(walkStep .getPolyline().get(0)); //去掉路线上沿途标志点 //addWalkStationMarkers(walkStep, latLng); addWalkPolyLines(walkStep); } mPolylineOptions.add(endPoint); //addStartAndEndMarker(); //调用下面的showPolyline showPolyline(); } catch (Throwable e) { e.printStackTrace(); } }private void showPolyline() { //此处方法调用的是其父类RouteOverlay 的方法 addPolyLine(mPolylineOptions); } } //此处为RouteOverlay类没有用到的代码已省略 public class RouteOverlay { //用于存储已添加到地图上的路线对象 public List allPolyLines = new ArrayList(); protected void addPolyLine(PolylineOptions options) { if(options == null) { return; } //获取所添加路线对象 Polyline polyline = mAMap.addPolyline(options); if(polyline != null) { //将路线添加到集合中 allPolyLines.add(polyline); } } } 到这里这样我们就获取到了所有添加到地图上的路线集合allPolyLines,然后通过上面我们添加路线时 得到的walkRouteOverlay(还记得上面注释写有大用处的么)就可以对已添加路线进行操作, 我的操作是: if (walkRouteOverlay != null) {List allPolyLines = walkRouteOverlay.allPolyLines; for (Polyline polyline : allPolyLines) { polyline.remove(); } }




//以上就是移除路线,或许高德API中有更好的方法,但我是这么处理的。。。。。。

注: /** 别忘了implements OnMapClickListener * 高德地图提供 如果点击地图上marker以外的区域回调 *@param latLng */ @Overridepublic void onMapClick(LatLng latLng) { //进行你想要进行的处理 }未完,待续。。。。。


注: /** 别忘了implements OnMapClickListener * 高德地图提供 如果点击地图上marker以外的区域回调 *@param latLng */ @Overridepublic void onMapClick(LatLng latLng) { //进行你想要进行的处理 }

这里有一个添加路线,移除路线的demo: Demo地址 点击打开


未完,待续。。。。。

/** * 获取两点之间的距离(单位为米) LatLng start = new LatLng(39.95676, 116.401394); LatLng end = new LatLng(36.63014,114.499574); float distance= AMapUtils.calculateLineDistance(start, end); */



    推荐阅读