Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理
2017-01-23 16:30
621 查看
先扔一些高德原有UI的更改占坑.//更改系统原有定位图标MyLocationStylemyLocationStyle=newMyLocationStyle();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
MarkerOptionsmarkerOptions=newMarkerOptions(); markerOptions.position(newLatLng(dlat,dlong));//参数为想要添加marker位置的经纬度 markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));//参数为想要展示的图标
aMap.addMarker(markerOptions);//将marker添加到地图上2 批量添加marker
第一步添加marker到地图上:
for(inti=0;i<dataList.size();i++){//此处dataList是存有想要添加marker点的集合 MarkerOptionsmarkerOptions=newMarkerOptions();//初始化MarkerOptions对象 markerOptions.position(newLatLng(目标点纬度,目标点经度)); markerOptions.icon(BitmapDescriptorFactory.fromBitmap(bitmap));//设置marker图标 markerOptionlist.add(markerOptions); }
//第二个参数是设置是否移动到屏幕中心,FALSE是不移动 markerList=aMap.addMarkers(markerOptionlist,false);//添加到地图上,返回所有marker的集合第二步设置marker监听
//设置market点击事件 aMap.setOnMarkerClickListener(markerClickListener);
//定义Marker点击事件监听 AMap.OnMarkerClickListenermarkerClickListener=newAMap.OnMarkerClickListener(){ //marker对象被点击时回调的接口 //返回true则表示接口已响应事件,否则返回false @Override publicbooleanonMarkerClick(Markermarker){ for(inti=0;i<markerList.size();i++){//markerList即为添加到地图上返回的marker集合 if(marker.equals(markerList.get(i))){ //已找到你所点击的marker,接下来进行你想要的操作 returntrue; } }
returnfalse;};功能二:如何添加路线和清除路线(步行路线为例)1绘制路线到地图上classAimplementsRouteSearch.OnRouteSearchListener{
//我自己的步行路线封装类privatevoidwalkRouteSearch(){
mStartPoint=newLatLonPoint(lastLat,lastLon);//路线起点mEndPoint=newLatLonPoint(lastLat,lastLon);//路线终点
mRouteSearch=newRouteSearch(activity);
mRouteSearch.setRouteSearchListener(this);//类A已实现OnRouteSearchListener
searchRouteResult(Constant.ROUTE_TYPE_WALK,RouteSearch.WalkDefault);
}
/***开始搜索路径规划方案*/publicvoidsearchRouteResult(introuteType,intmode){try{if(mStartPoint==null){Utils.ToastUtils(mContext,"定位中,稍后再试...");return;}if(mEndPoint==null){Utils.ToastUtils(mContext,"终点未设置");}finalRouteSearch.FromAndTofromAndTo=newRouteSearch.FromAndTo(mStartPoint,mEndPoint);if(routeType==Constant.ROUTE_TYPE_WALK){//步行路径规划RouteSearch.WalkRouteQueryquery=newRouteSearch.WalkRouteQuery(fromAndTo,mode);mRouteSearch.calculateWalkRouteAsyn(query);//异步路径规划步行模式查询}}catch(Exceptione){Utils.LogUtils("1Exception:"+e.toString());}}
//RouteOverlay更改路线颜色宽度等RouteOverlayrouteOverlay;publicWalkRouteOverlaywalkRouteOverlay;@OverridepublicvoidonWalkRouteSearched(WalkRouteResultresult,interrorCode){if(walkRouteOverlay!=null){List<Polyline>allPolyLines=walkRouteOverlay.allPolyLines;for(Polylinepolyline:allPolyLines){polyline.remove();}}try{if(errorCode==AMapException.CODE_AMAP_SUCCESS){if(result!=null&&result.getPaths()!=null){if(result.getPaths().size()>0){mWalkRouteResult=result;finalWalkPathwalkPath=mWalkRouteResult.getPaths().get(0);walkRouteOverlay=newWalkRouteOverlay(//该对象在移除路线时有大用处activity,aMap,walkPath,mWalkRouteResult.getStartPos(),mWalkRouteResult.getTargetPos());
//walkRouteOverlay.zoomToSpan();//镜头移动到当前视角//walkRouteOverlay.setNodeIconVisibility(false);//去掉沿途标志图标//walkRouteOverlay.removeFromMap();//去掉路线上所有markers,包括起点终点图标walkRouteOverlay.addToMap();
}elseif(result!=null&&result.getPaths()==null){
Utils.ToastUtils(mContext,"no_result");
}
}else{
Utils.ToastUtils(mContext,"no_result");
}
}else{
Utils.ToastUtils(mContext,"errorCode:"+errorCode);
}
}catch(Exceptione){
Utils.LogUtils("2Exception:"+e.toString());
}
}
2更改路线宽度、颜色以及清除路线
//更改路线宽度和颜色
//此处用到两个类WalkRouteOverlay和RouteOverlay
//其中WalkRouteOverlayextendsRouteOverlay,是它的子类
点开RouteOverlay类,找到
protectedfloatgetRouteWidth(){//修改返回值设置路线宽度return5f;}
protectedintgetWalkColor(){//修改返回值设置路线颜色returnColor.parseColor("#5ac0f3");}
移除路线上面将路线添加到地图上时:walkRouteOverlay.addToMap();调用WalkRouteOverlay类中的方法:
//此处为WalkRouteOverlay类,类中用不到的方法已省略publicclassWalkRouteOverlayextendsRouteOverlay{privatePolylineOptionsmPolylineOptions;privateBitmapDescriptorwalkStationDescriptor=null;privateWalkPathwalkPath;
...............此处省略用不到代码............./***添加步行路线到地图中。*@sinceV2.1.0*/publicvoidaddToMap(){initPolylineOptions();try{List<WalkStep>walkPaths=walkPath.getSteps();mPolylineOptions.add(startPoint);for(inti=0;i<walkPaths.size();i++){WalkStepwalkStep=walkPaths.get(i);LatLnglatLng=AMapServicesUtil.convertToLatLng(walkStep.getPolyline().get(0));//addWalkStationMarkers(walkStep,latLng);//去掉路线上沿途标志点addWalkPolyLines(walkStep);}mPolylineOptions.add(endPoint);//addStartAndEndMarker();showPolyline();//调用下面的showPolyline}catch(Throwablee){e.printStackTrace();}}privatevoidshowPolyline(){addPolyLine(mPolylineOptions);//此处方法调用的是其父类RouteOverlay的方法}}
//此处为RouteOverlay类没有用到的代码已省略
publicclassRouteOverlay{
publicList<Polyline>allPolyLines=newArrayList<Polyline>();//用于存储已添加到地图上的路线对象
protectedvoidaddPolyLine(PolylineOptionsoptions){if(options==null){return;}Polylinepolyline=mAMap.addPolyline(options);//获取所添加路线对象if(polyline!=null){allPolyLines.add(polyline);//将路线添加到集合中}}
}到这里这样我们就获取到了所有添加到地图上的路线集合allPolyLines,然后通过上面我们添加路线时
得到的walkRouteOverlay(还记得上面注释写有多大用处的么)就可以对已添加路线进行操作,
我的操作是:
if(walkRouteOverlay!=null){
List<Polyline>allPolyLines=walkRouteOverlay.allPolyLines;for(Polylinepolyline:allPolyLines){polyline.remove();}}//以上就是移除路线,或许高德API中有更好的方法,但我是这么处理的。。。。。。
注:
/**
别忘了implementsOnMapClickListener*高德地图提供如果点击地图上marker以外的区域回调
*@paramlatLng
*/
@OverridepublicvoidonMapClick(LatLnglatLng){
//进行你想要进行的处理
}未完,待续。。。。。/***获取两点之间的距离(单位为米)LatLngstart=newLatLng(39.95676,116.401394);LatLngend=newLatLng(36.63014,114.499574);floatdistance=AMapUtils.calculateLineDistance(start,end);*/
相关文章推荐
- android集成百度地图 驾车路线规划 并在地图上绘制出路线
- Android 高德地图开发 如何去掉路线规划上起始点图标!
- Android 开发之集成百度地图的定位与地图展示
- 调用高德地图,百度地图,腾讯地图,苹果地图路线规划(无需集成SDK)
- Android 开发之集成百度地图的定位与地图展示
- Arcgis for Android解决定位结果与地图偏移的简单处理思维
- 在android项目中简单的集成baidu地图之定位功能
- Android 高德地图驾车路线规划
- Android 高德地图——地图定位
- Android 使用高德地图简单实现地图定位
- Android 百度地图 SDK v3.3.0 (二)--- 地图定位和图层展示
- Android学习历程——高德地图学习开发之显示地图,定位
- Android 高德地图——地图展示
- android开发游记:百度地图SDK路线规划和自定义地图UI覆盖物及弹出窗
- Android百度地图、高德地图、腾讯地图导航路线规划问题
- Android集成百度地图接口,实现定位+路径规划。新手教程
- android 百度地图路线规划去掉节点图标
- android-2(集成高德地图,定位显示)
- android---高德地图(4)路线规划
- android ---------高德地图实现定位和3D地图显示