您的位置:首页 > 移动开发 > Android开发

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);*/
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: