首页 理论教育 地图定位与覆盖物标识实验

地图定位与覆盖物标识实验

时间:2023-06-30 理论教育 版权反馈
【摘要】:掌握Camera Update对象的使用方法,通过该对象控制地图的缩放级别、定位、复位地图的方法。AMap提供了很多方法来增加覆盖物,本实验主要介绍增加Marker标识和在地图上绘制直线的方法。程序调用AMap的moveCamera方法根据Camera Update对地图进行缩放、定位、倾斜,改变地图的中心点,限制地图的显示范围等。

地图定位与覆盖物标识实验

1.实验目的

(1)掌握获取移动设备位置的方法,并在地图上标识。

(2)掌握通过指定的经度和纬度在地图上使用Marker进行标识。

(3)掌握Camera Update对象的使用方法,通过该对象控制地图的缩放级别、定位、复位地图的方法。

2.位置服务

Android平台支持提供位置服务的API,在开发过程中主要用到Location Manager对象。该对象主要用于获取当前的位置、追踪设备的移动路线或设定敏感区域,在进入或离开敏感区域时设置设备发出特定警报等操作。获取Location Manager对象的方法如下所示。

Location Manager提供了一种便捷、高效的位置监视方法request Location Updates(),该方法可以根据距离变化和时间间隔进行设置,产生位置改变事件的条件,这样可以避免因微小的距离变化而产生大量的位置改变事件。Location Manager中设定监听位置变化的代码如下所示。

第1个参数:定位方法(LocationProvider),可以使用GPS定位(Location Manager.GPS_PROVIDER)或网络定位(Location Manager.NETWORK_PROVIDER)。使用GPS定位:利用卫星提供精确的位置信息,需要android.permission.ACCESS_FINE_LOCATION用户权限。使用网络定位:利用基站或WiFi提供近似的位置信息,需要具有android.permission.ACCESS_COARSE_LOCATION或android.permission.ACCESS_FINE_LOCATION权限。

第2个参数:产生位置改变事件的时间间隔条件,满足该条件即调用监听器中相应的回调函数,并把改变后的位置作为入参传入,单位为微秒。

第3个参数:产生位置变化的距离条件,单位为米。

第4个参数:Location Listener对象,用于处理位置改变事件的监听器,实例化该对象必须实现4个回调函数。

回调函数的入参传递了可以确定位置的信息,如经度、纬度和海拔等,常用的get Latitude()和get Longitude()方法可以分别获取位置信息中的纬度和经度。

3.覆盖物

通过Map View获取AMap对象之后,通过AMap来控制地图的显示外观。AMap提供了很多方法来增加覆盖物,本实验主要介绍增加Marker标识和在地图上绘制直线的方法。不论程序需要向地图上添加什么覆盖物,操作步骤都大致相同,可按以下步骤进行。

(1)创建一个Xxx Options覆盖物对象。如果要添加Marker标识,则程序需要先创建一个Marker Options。

(2)调用覆盖物对象Xxx Options的各种方法来设置属性。例如,position(Lat Lng var1)方法可以设置Marker标识的位置,其中Lat Lng是高德地图提供的对纬度、经度进行封装的类,用于表示地图上的一个位置。

(3)调用AMap对象的add Xxx()方法添加。例如,增加Marker的方法如下:

4.地图控制

高德地图还提供了一个Camera Update类用于地图的基本控制,Camera Update可设置地图的缩放级别、定位、倾斜角度等信息。该类并未提供构造器,程序需要通过Camera UpdateFactory来创建该类的实例。程序调用AMap的moveCamera(Camera Update update)方法根据Camera Update对地图进行缩放、定位、倾斜,改变地图的中心点,限制地图的显示范围等。

5.界面与功能

本实验展示了如何根据经度、纬度在地图上定位,如何获取移动设备的地理位置并在地图上标识。

当第一个按钮显示为“手动定位”时,该应用程序会提供文本框让用户输入经度、纬度,如图6.17(a)所示,点击“定位”按钮后会调用指定经纬度的地图,这里仅支持国内地图服务,即经度范围是73°33′E至135°05′E,纬度范围是3°51′N至53°33′N,海外服务需要申请开通高德海外LBS服务权限。地图界面上有3个Marker,并为Marker分别设置了3个不同的颜色,其中最下面的Marker会不停地闪烁,如图6.17(b)所示。

当第一个按钮显示为“GPS定位”时,该应用程序会主动获取模拟器或移动设备的位置,如图6.17(c)所示。获取设备的定位信息这种方式得到的只不过是一些经度、纬度值,如果这些经度、纬度值不能以更形象、直观的方式显示出来,对大部分普通用户而言,这些经度、纬度数据几乎没有任何价值。高德地图可以根据经度、纬度调整地图所指向的位置,并且可以在地图上通过Marker进行标识。这里的Marker带有增长动画

6.实验步骤(www.xing528.com)

步骤1:新建工程App16,包路径为“cn.edu.android.app16”。

步骤2:按照本章实验1中的叙述在高德官网获取“cn.edu.android.app16”地图服务的API Key,并在Android Manifest.xml配置文件和build.gradle文件中进行相关设置。

图6.17 根据经纬度定位

步骤3:按照本章实验1中的步骤15实现必须实现的生命周期回调函数,并回调Map View的生命周期函数。

步骤4:复制purple_pin.png至mipmap目录。

步骤5:在strings.xml文件中增加以下字符串。

步骤6:设计该程序的界面布局代码如下。

步骤7:获取用户输入的经度、纬度来进行定位,或者根据GPS传入的信号进行定位。

步骤8:实现updatePosition()方法,根据传入的经度、纬度在AMap上定位,根据步骤7获取的经度、纬度创建Lat Lng对象,调用Camera UpdateFactory的change Lat Lng()方法创建改变地图中心的Camera对象,调用AMap的moveCamera(CameraUpdate update)即可控制地图定位到指定位置。该示例程序的代码如下所示。

步骤9:设置模拟器位置。打开夜神模拟器,在侧边栏单击“虚拟定位”按钮,将地图放大至最大,在地图上单击当前的位置,然后单击“定位到该位置”按钮,结果如图6.18所示。使用真机可忽略此步骤。

图6.18 设置模拟器位置

步骤10:运行并调试App16。

知识拓展:代码混淆

项目化开发过程中经常要用到代码混淆,即将项目的配置代码中的类名、方法名、成员变量等进行无意义的字符替换,达到增加反编译难度的作用。代码混淆主要通过模块的build.gradle文件实现,因为开启混淆会使编译时间变长,所以调试模式下不开启该功能,可以按以下代码配置。

Android自带的混淆规则为proguard-android.txt,该文件在“\\Sdk\tools\proguard\”目录下,该文件中定义了一些默认的混淆规则,在实际的项目中可以统一替换为该文件。proguard-rules.pro是自定义的混淆规则,官方网站提供了混淆指令的介绍:https://www.guardsquare.com/en/products/proguard。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈