先扔一些高德原有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添加到地图上
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) { ListallPolyLines = 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 { ListwalkPaths = 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 ListallPolyLines = 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) { ListallPolyLines = walkRouteOverlay.allPolyLines; for (Polyline polyline : allPolyLines) { polyline.remove(); } }
注: /** 别忘了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); */