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添加到地图上

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);

 */

你可能感兴趣的:(个人经验)