Android 高德地图集成 地图展示+定位+路线规划+各种原有图标的隐藏处理_muisettings.setzoomcontrolsenabled(false)无法隐藏按钮-程序员宅基地

技术标签: 个人经验  路线绘制 清除  多个marker添加  高德地图  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<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;
        }

        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<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() {
                //此处方法调用的是其父类RouteOverlay 的方法
                addPolyLine(mPolylineOptions);
            }
        }
        //此处为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) {
    //进行你想要进行的处理
}

未完,待续。。。。。

注:
/**
 别忘了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);

 */

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011288271/article/details/54694393

智能推荐

【小李木耳】出品:一直舍不得丢掉的东西:“一(个)白云、三(个)兔子...” 和“...早日发账”-程序员宅基地

文章浏览阅读841次。 什么是虚拟化3.0时代? 微软公司的云计算服务有哪些? 云计算IDC服务都包括什么? 什么是云计算? 向私有云过渡的步骤有哪些?一直舍不得丢掉的东西:“一(个)白云、三(个)兔子...” 和“...早日发账”(写于2011年12月10日00:17 北京)今天这个话题比较有感觉,就晒一晒我舍不得的两件东西:“一(个)白云、三(个)兔子...” 和“

Unity_用鼠标控制相机旋转、拖拽、视角缩放_unity 相机 平移 拖拽 缩放-程序员宅基地

文章浏览阅读2w次,点赞17次,收藏97次。一、滚轮控制视角缩放 /// &amp;amp;lt;summary&amp;amp;gt; /// 滚轮控制相机视角缩放 /// &amp;amp;lt;/summary&amp;amp;gt; public void CameraFOV() { //获取鼠标滚轮的滑动量 float wheel = Input.GetAxis(&amp;quot;Mouse ScrollWheel&am_unity 相机 平移 拖拽 缩放

精选力扣500题 第22题 LeetCode 88. 合并两个有序数组【c++详细题解】_力扣22 c++-程序员宅基地

文章浏览阅读280次,点赞6次,收藏4次。目录1、题目2、思路13、代码14、思路25、代码21、题目给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2的元素数量分别为 m 和n。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]_力扣22 c++

php文本框怎么设置好看,一个很不错的CSS改写的大表单文本框和搜索按钮组-程序员宅基地

文章浏览阅读139次。《一个很不错的CSS改写的大表单文本框和搜索按钮组》要点:本文介绍了一个很不错的CSS改写的大表单文本框和搜索按钮组,希望对您有用。如果有疑问,可以联系我们。先看效果图:HTML代码部分:开始爬取CSS部分:/*大搜索框*/.searchInputBox{height:62px;width:810px;margin:0auto;border-radius:6px;background-..._css 好看 文本框

select下拉框启用和禁止-程序员宅基地

文章浏览阅读3.4k次。描述:通过你好来判断hello是否启用和禁止html:<li> <span class="xin">*</span><label>你好</label> <select id="dimAcc"> <option >类似</option> ..._select下拉框启用和禁止

【前端面试--JS】=>关于async/await、promise和setTimeout的执行顺序_js执行顺序console.log('script start') async function a-程序员宅基地

文章浏览阅读988次,点赞29次,收藏21次。前言之前面试遇到这样一个题目。关于async/await、promise和setTimeout的执行顺序,当时没做对。后来查了查是非常经典的题目。也给大家解疑答惑一下,说出自己的理解。题目是看代码写结果。async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end');}async function async2() { console.log('async2_js执行顺序console.log('script start') async function async1() { await async2

随便推点

Vue笔记整理,12.项目-完成tabbar的小图标设置_tab-bar设置图标-程序员宅基地

文章浏览阅读912次。一、前言上一节我们介绍了:vs code工具的一些特殊使用,使用vs code默认集成的Git工具快速提交代码,详细可参考博文:原创Vue笔记整理,11.项目-使用vs code默认集成的Git工具快速提交代码这篇我们将介绍项目-完成tabbar的小图标设置二、完成tabbar的小图标设置更新中。。。..._tab-bar设置图标

D4 - Makefile_d4文件-程序员宅基地

文章浏览阅读109次。第一节 Make与MakefileMake简介Make将只编译改动的代码文件,而不用完全编译Make使用Makefile1:Make只能读取Makefile文件2:Makefile功能包含’由谁生成’可执行文件,‘怎么生成可执行文件’.‘生成什么可执行文件’Makefile格式生成什么:由谁生成 <table> commandMakefile隐含规则第二节 创建与使用变量Make变量(变量必须大写)去""的字符串Make变量为了便_d4文件

Android MVVM(使用经验篇)-程序员宅基地

文章浏览阅读702次。MVVM的大名相信做手机开发的肯定不会陌生,我第一次听到它是从做IOS开发的同学那里听到的,我们的项目之前应用了MVP,要说服大家从MVP到MVVM,肯定得说说为啥,他优秀在那里? 首先我们看看正常MVP的依赖关系图: 这是个经典的MVP依赖关系,View 层和Presenter,Presenter和Model层彼此依..._android mvvm image src

postgresql 日志配置_pg修改log_connections-程序员宅基地

文章浏览阅读4.8k次。PostgreSQL有3种日志,分别是pg_log(数据库运行日志)、pg_xlog(WAL 日志,即重做日志)、pg_clog(事务提交日志,记录的是事务的元数据)pg_log默认是关闭的,需要设置参数启用此日志。pg_xlog和pg_clog都是强制打开的,无法关闭。1.启用pg_log并配置日志参数log_destination = 'csvlog'logging_collector = o..._pg修改log_connections

php逆波兰表达式,我就给一个PHP逆波兰表达式的算法吧---工资计算专用-程序员宅基地

文章浏览阅读62次。有个网友写信给我谈到关于PHP计算工资问题。我以前一篇文章中谈到过一种计算工资的方法,不过是偷巧,利用现有的表达式的工具,现在既然有人想要,我就给出一个逆波兰的算法。 我们的目标是实现如下的计算公式: 假设有一个计算公式如下: $expression = "(F1*F12+10.34)"; 其中的变量值如下: $expression_value = Array('F1'=>10, 'F12'..._php 逆波兰算法 函数

模板类之间的友元关系实现Blob和BlobPtr-程序员宅基地

文章浏览阅读57次。16.12编写你自己版本的Blob和BlobPtr模板,包含书中未定义的多个const成员。Blob.h(注意,成员函数的声明和定义要放在一个头文件中)/*记住,模板的头文件中通常既包括声明也包括定义。函数模板和类模板成员函数的定义通常放在头文件中,不能分开放。。。。谨记*/#ifndef BLOB_H#define BLOB_H#include<iostream&g..._blobptr