基于Android studio开发高德地图之连续定位、标点、画线
目录
获取key值
创建地图
layout文件
Activity
源码:https://github.com/zzjdreams/gaode_map_track
截图:(这个是我叫我弟截图的,所以不是我的所在地《~……~》)
请忽视部分:
MainActive及其相关的布局文件:这部分是我直接复制别人的代码直接运行,结果发现他们要创建很多文件夹而且部分文件没展示出来导致我无法成功运行,但我又不想放弃这些代码的思路,于是就选择保存下来方便我借阅。
被注释部分:这部分的代码都是我从高德开发文档抄录下来的代码和从别人博客中搬运过来的代码(被我乱改后的),这些代码是我遇到问题和不断修改的过程,所以我这部分也保留了大半,方便以后查看。
上传图片太麻烦,我不上传了。
思路:
获取key值
这一部分网络上一大堆,就不整理了(听说没了这部分高德地图的相关功能会用不了)
##下载高德地图SDK并将其配置给Android studio##
我这里下载的是3D地图、定位、导航、搜索、猎鹰的整合jar包。
遇到的问题:
1、使用2d地图加载时地图瓦片方式加载出来,而且有时会有一块加载不出来,需要放大缩小才加载完全,移动地图时地图加载较慢。其次是2d地图不支持3d地图的很多功能,例如导航功能。为了避免后期可能遇到的问题,因此果断选择3d地图。
2、2d地图和3d地图不能显示在一个mapview中,且不能重复导入相同的SDK,不然会编译错误无法安装。(我就是同时导入了2d地图和其定位功能和3d地图的所有功能,结果一直编译报错,纠结了我很久。)
3、解压完3d地图包后会发现有1个jar和5个文件夹。需要将jar包放在lib中(Android studio添加project structure),将其他5个文件夹放入 app\src\main\jniLibs 的目录下,没有自行创建,之后不用设置SourceSets
创建地图
layout文件
3d地图使用: <com.amap.api.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2d地图使用:
<com.amap.api.maps2d.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="6"/>
Activity
地图显示
private MapView mMapView;//显示地图的视图
private AMap aMap;//定义AMap 地图对象的操作方法与接口。 mMapView = (MapView) findViewById(R.id.mapview);
mMapView.onCreate(savedInstanceState);//必须调用
@Override
protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图 mapView.onDestroy(); deactivate(); }
@Override
protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图 mapView.onResume();
}
@Override
protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制 mapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),保存地图当前的状态 mapView.onSaveInstanceState(outState);
}
定位
private MyLocationStyle myLocationStyle;
private OnLocationChangedListener mListener;
private AMapLocationClient mlocationClient;
private AMapLocationClientOption mLocationOption;
public void init(){
if (aMap == null) {//初始化地图,加载地图时直接进行
aMap = mapView.getMap();
}
aMap=mapView.getMap();
aMap.setTrafficEnabled(true);// 显示实时交通状况
myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(10000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
// 设置定位监听
aMap.setLocationSource((LocationSource) this);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
aMap.setMyLocationEnabled(true);// 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (mListener != null&& aMapLocation != null) {
if (aMapLocation != null
&&aMapLocation.getErrorCode() == 0) {
this.setCurrentLat(aMapLocation.getLatitude());//获取纬度实例化后的经纬度
this.setCurrentLon(aMapLocation.getLongitude());
//获取经度
mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点
Toast.makeText(SportActivity.this,aMapLocation.getAddress(),Toast.LENGTH_SHORT).show();
this.currentLat=currentLat;
this.currentLon=currentLon;
} else {
String errText = "定位失败," + aMapLocation.getErrorCode()+ ": " + aMapLocation.getErrorInfo();
Log.e("AmapErr",errText);
Toast.makeText(SportActivity.this,errText,Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void activate(OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { //初始化定位 mlocationClient = new AMapLocationClient(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位回调监听 mlocationClient.setLocationListener(SportActivity.this); //设置为高精度定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位参数 mlocationClient.setLocationOption(mLocationOption); mlocationClient.startLocation();//启动定位 }
}
@Override
public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null;Toast.makeText(SportActivity.this,"close location",Toast.LENGTH_SHORT).show();
}
标点和画线
实例化Marker,具体见MarketBean。java,向其传递经度纬度,标题内容
private double currentLat;
private double currentLon;
private List<MarketBean> marketList;
private List<LatLng> lat;
private Handler handler = new Handler(); private Runnable task = new Runnable() { public void run() { // TODO Auto-generated method stub handler.postDelayed(this, 5 * 1000);//设置延迟时间,此处是5秒 //需要执行的代码 marketList.add(new MarketBean(SportActivity.this.getCurrentLat(), SportActivity.this.getCurrentLon(), "当前坐标第"+clicknum+"个", "经度:"+SportActivity.this.getCurrentLat()+" "+"纬度:"+SportActivity.this.getCurrentLon())); aMap.addMarker(new MarkerOptions() .position(new LatLng(marketList.get(clicknum).getLatitude(),//设置纬度 marketList.get(clicknum).getLongitude()))//设置经度 .title(marketList.get(clicknum).getTitle())//设置标题 .snippet(marketList.get(clicknum).getContent())//设置内容 .icon(BitmapDescriptorFactory.fromResource(R.drawable.pen))); for(int i=0;i<marketList.size();i++){ lat.add((new LatLng(marketList.get(i).getLatitude(), marketList.get(i).getLongitude()))); } clicknum+=1; Log.e(String.valueOf(SportActivity.this),"点击次数:"+clicknum); Log.e(String.valueOf(SportActivity.this),"lat:"+lat.size()); if(lat.size()!=1){ aMap.addPolyline(new PolylineOptions().addAll(lat).width(10).color(Color.argb(150, 3, 255, 1)));//画线 } }
}; //调用循环
handler.postDelayed(task, 5000);//每两秒执行一次runnable.
//清除所有数据
aMap.clear();
clicknum=0;
marketList.clear();
lat.clear();
handler.removeCallbacks(task);
基于Android studio开发高德地图之连续定位、标点、画线相关推荐
- (超多图)基于Android studio开发的一个简单入门小应用(超级详细!!)(建议收藏)
基于Android studio开发的一个简单入门小应用 一.前言 二.前期准备 三.开发一个小应用 五.运行应用 一.前言 在暑假期间,我学习JAVA基础,为了能早日实现自己用代码写出一个app的& ...
- 基于Android Studio开发的旅游记录与分享APP源码,Android旅游路线记录与分享APP源码
GoTravelling 旅游路线记录与分享Android App--同享旅行 下载地址:基于Android Studio开发的旅游记录与分享APP源码 App介绍 目标用户 在寒暑假内希望结伴同游的 ...
- 基于android studio开发多人电话语音视频会议入门实例demo含app下载链接
目录 说明 视频演示 图文演示 android版本支持 相关下载 说明 这是一个相对完整的客户端+服务器端的项目,适合入门学习研究.包含android摄像头.麦克风使用权限的动态申请,控件的事件绑定, ...
- 基于 Android studio 开发的一个记账本
目录 1. 项目简介 1.1项目设计目标 1.2项目功能分析 2. 需求分析 2.1特性需求分析 2.2功能需求分析 3. 项目设计 3.1总体设计 3.2数据库ER图 3.3功能模块设计 4. 项目 ...
- Android Studio之高德地图实现定位和3D地图显示
在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码 ...
- 2019-详细Android Studio开发百度地图(5)—百度地图_导航和TTS语音播报的实现
百度地图_导航和TTS语音播报的实现 前言 从小白一步步开始,很多资源是很久以前的,而且没有操作配套截图和资源分享.现在本踩过了很多坑,现在开发完成后决定重新写一份教程,希望能借此帮助到许多其他有这方 ...
- 2019-详细Android Studio开发百度地图(4)—百度地图_路线规划的实现
百度地图_路线规划的实现 前言 从小白一步步开始,很多资源是很久以前的,而且没有操作配套截图和资源分享.现在本踩过了很多坑,现在开发完成后决定重新写一份教程,希望能借此帮助到许多其他有这方面需求的人. ...
- android studio引用高德地图api后地图显示白屏
这个问题困惑了好几天,可以说是睡觉吃饭都会想这个问题,来来回回改了代码,查换key,重新写验证小程序.最后,总算是功夫不负有心人,吃再多苦也值了. 问题:as采用高德地图api,显示地图为白屏 解决方 ...
- android显示地图代码,Android Studio之高德地图实现定位和3D地图显示(示例代码)
/**** * 讲诉了高德地图定位和3D地图显示 * * 打包和未打包的情况是不一样的,高德配置是可以配置调试版和发布版 **/ public class MainActivity extends A ...
最新文章
- SNMP系统信息获取工具onesixtyone
- Java的知识点22——时间处理相关类、Date时间类(java.util.Date)、DateFormat类和SimpleDateFormat类、Calendar日历类
- SecureCRT脚本之WaitForString函数
- Flask 蓝图,数据库链接
- 【SpringMVC框架】非注解的处理器映射器和适配器
- 每 1000 行代码有 14 个安全缺陷,开源软件的安全令人堪忧
- 集群提交HBase代码报错:Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguratio
- 移动磁盘故障,如何在Mac修复?
- 感觉文章和回复都不错,转载了---用正则表达式找出不包含连续字符串abc的单词...
- 白盒测试-JUnit框架
- Google Research等机构提出新的AI算法以了解人脑网络中的电刺激效应
- QTextEdit和QTextDocument(一)
- python动作捕捉_树莓派动作捕捉抓拍存储图像脚本
- Facebook广告投放的正确姿势:玩转目标定位
- 【大学物理· 恒定电流的磁场】有磁介质时的安培环路定理和高斯定理 磁场强度
- 一条sql语句实现一维表生成二维表格
- 坦克世界服务器系统不更新失败怎么办,坦克世界安装更新数据失败怎么办? 爱问知识人...
- XOR Specia-LIS-t
- python scrapy 爬取妹子图的照片
- 【放置江湖】弱联网手游,网络协议分析修改。每天签到可获得35元宝
热门文章
- 阿里云大数据认证——基于阿里云数加构建企业级数据分析平台-课堂笔记
- 微信小程序破解版环境搭建
- java乐器培训班报名管理系统springboot+vue
- 零技巧的电饭锅懒人菜
- 关于路缘石成型机管理你想象能有几多种变化
- 重根的二阶迭代法matlab,MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根...
- token 登录途中自动延迟失效时间
- pandas删除nan的行
- java 2 实用教程(第五版)第六章课后编程题:设计一个动物声音模拟器,希望模拟器可以模拟许多的动物的叫声。
- 解决:Error resolving template [/xxx], template might not exist or might not be accessible by any of th