Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理
来源:互联网 发布:光伏数据采集器品牌 编辑:程序博客网 时间:2024/05/01 02:37
先扔一些高德原有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);}第二步设置marker监听//第二个参数是设置是否移动到屏幕中心,FALSE是不移动markerList = aMap.addMarkers(markerOptionlist, false);//添加到地图上,返回所有marker的集合//设置market 点击事件aMap.setOnMarkerClickListener(markerClickListener);// 定义 Marker 点击事件监听 AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() { // marker 对象被点击时回调的接口 // 返回 true 则表示接口已响应事件,否则返回false @Override public boolean onMarkerClick(Marker marker) { for (int i = 0; i < markerList.size(); i++) {//markerList即为添加到地图上返回的marker集合 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已实现OnRouteSearchListenersearchRouteResult(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<Polyline> 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;}上面将路线添加到地图上时:walkRouteOverlay.addToMap();调用WalkRouteOverlay类中的方法:protected int getWalkColor() {//修改返回值设置路线颜色 return Color.parseColor("#5ac0f3");}移除路线
//此处为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<WalkStep> 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() { addPolyLine(mPolylineOptions);//此处方法调用的是其父类RouteOverlay 的方法 }}//此处为RouteOverlay类 没有用到的代码已省略public class RouteOverlay {
public List<Polyline> allPolyLines = new ArrayList<Polyline>();//用于存储已添加到地图上的路线对象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<Polyline> allPolyLines = walkRouteOverlay.allPolyLines; for (Polyline polyline : allPolyLines) { polyline.remove(); }}//以上就是移除路线,或许高德API中有更好的方法,但我是这么处理的。。。。。。注:
/**别忘了implements OnMapClickListener
* 高德地图提供 如果点击地图上marker以外的区域回调* @param latLng*/
@Overridepublic void onMapClick(LatLng latLng) {//进行你想要进行的处理}
未完,待续。。。。。可加QQ1301989189进行交流
/** * 获取两点之间的距离(单位为米) LatLng start = new LatLng(39.95676, 116.401394); LatLng end = new LatLng(36.63014,114.499574); float distance = AMapUtils.calculateLineDistance(start, end); */
0 0
- Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理
- Android 高德地图驾车路线规划
- Android 高德地图 步行 路线规划
- android 高德地图 驾车路线规划
- 调用高德地图,百度地图,腾讯地图,苹果地图路线规划(无需集成SDK)
- 高德地图Android自定义路线规划的简单实现
- 高德地图路线规划
- android高德地图定位集成
- Android 高德地图开发 如何去掉路线规划上起始点图标!
- 高德定位地图的集成
- Android百度地图、高德地图、腾讯地图导航路线规划问题
- Android百度地图、高德地图、腾讯地图导航路线规划问题
- android---高德地图(4)路线规划
- 高德地图——路线规划
- iOS高德地图sdk规划路线
- js-高德地图规划路线
- 高德地图 步行路线规划 Walking
- 高德地图之路线规划
- 在大数组中查找
- js selecte标签获取选中状态
- POJ 1001.Exponentiation
- 网络环境查看命令
- 设计模式
- Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理
- 软件许可证License
- 设计模式: Decorator 装饰者(java)
- const 与typedef 共同声明指针
- 子元素在父元素里水平居中
- JAVA 对象引用
- linux ffmpeg 源码安装教程
- ruguoshijieqihei
- LeetCode 263. Ugly Number