![HTML5 APP开发从入门到精通(微课精编版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/420/31794420/b_31794420.jpg)
4.2 案例实战
下面通过多个案例练习使用HTML5访问用户位置的方法和应用技巧。
注意,由于国家网络限制,内地访问谷歌地图不是很顺畅,建议读者选用高德地图或百度地图开发API,也可以直接使用本书提供的用户key(http://lbs.amap.com/)进行上机练习。
4.2.1 定位手机位置
本例演示通过Wi-Fi、GPS等方式获取当前地理位置的坐标。当用户打开浏览器时,页面会显示手机网络信号地理定位的当前坐标,同时用高德地图显示当前的地理位置,运行效果如图4.1所示。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P85_10668.jpg?sign=1738866573-UIxCHXzpdsT0Maft8W0urjYKvfokVMTZ-0-863db3317c79565e40d4e791fc892ecf)
图4.1 定位手机位置
提示,第一次运行该页面时,浏览器会弹出“是否授权使用您的地理位置信息”的提示,该程序需要授权才可正常使用定位功能。
示例核心代码如下。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P86_40970.jpg?sign=1738866573-FYtZBgniEa6AtLC4lPGwjYQizNTfsi1J-0-3e5770105706917e88a3d16123524664)
4.2.2 获取经纬度及其详细地址
下面的示例演示了如何使用高德地图获取单击位置的经纬度,并根据经纬度获取该位置点的详细地址信息,演示效果如图4.2所示。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P87_10848.jpg?sign=1738866573-1tTMKhDvcVJvB5rFcw4i4Twrdmow7aMZ-0-9822e6f3a6b3d3dfa79f260ffafa7f6e)
图4.2 获取经纬度及其详细地址
示例核心代码如下。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P87_10847.jpg?sign=1738866573-5fbzzlxvqn5mPWTEARMG9SjtSPw01jNE-0-25d66f0881cdd8010049ef04f2955e83)
4.2.3 输入提示查询位置
本例利用高德地图API设计一个定位交互操作,在地图界面设置一个文本框,允许用户输入关键词,然后自动匹配提示相关地点列表选项。用户选择匹配的关键词之后,页面会自动标记对应位置,效果如图4.3所示。本例使用了高德地图API中的Autocomplete和PlaceSearch类定位搜索。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P88_10934.jpg?sign=1738866573-q2KBH5TMUHsa3Orbfov4v2hf9BNeXOI1-0-e5761ae9285818db1de0eb98cd90e2ad)
图4.3 输入提示查询位置
示例核心代码如下。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P88_40974.jpg?sign=1738866573-Bl8CG20ewueCTTngFcypjxEh5xvdkw2E-0-7062fa7391dcfdd25992fd14524cb76e)
4.2.4 从当前位置查询指定位置路线
本例用HTML5 Geolocation API技术获取用户当前位置的经纬度。然后调用高德地图API,根据用户在地图中单击的目标点位置,查询最佳的行走路线,演示效果如图4.4所示。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P89_11008.jpg?sign=1738866573-cTHSRycX4yT3FdJn1VuKdUXqBjfzAdfJ-0-b23dbb6b0e0b0d2359ec56f9962a3c1b)
图4.4 从当前位置查询指定位置路线
示例核心代码如下。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P90_11085.jpg?sign=1738866573-wrhyLzAfdOWCIzrlFHTmlErzYkdQGmBo-0-5ce037ccca57b913e0985dbd2a59bb4c)
4.2.5 记录行踪路线
本例设计在地图上记录用户运动的轨迹,如图4.5所示。启动页面,载入地图。单击“开始记录”按钮,随着用户的移动,在地图上同步呈现运动轨迹;单击“停止记录”按钮,停止记录轨迹,并清除历史记录轨迹。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P90_11088.jpg?sign=1738866573-7TiDquOMdCYc2eT9Hrwl8No3KzOVqn9K-0-aae48be518f65c686d5cac21d57fc9ef)
图4.5 记录行踪路线
【操作步骤】
第1步,本例采用高德地图,练习前需要在高德地图官网上申请AppKey,或者直接使用本例源码,然后引入高德地图的JavaScript,代码如下。
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.6&key=93f6f55b917f04781301bad658886335&plugin= AMap.Walking"></script>
第2步,设计页面结构,代码如下。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P91_40979.jpg?sign=1738866573-Jc8gRsN7JRrVfV6vtWF5OayVtvOlgLJJ-0-b319160c5d38b79ab65a4f44cc6d8b4b)
第3步,调用高德地图API绘制地图,并设置地图的中心点和较低的缩放级别,显示整个城市的地图,代码如下。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P91_40981.jpg?sign=1738866573-RyLSgJyBaFBZnvcGRWv5gfZVBMt92Ej1-0-68c91b235011f55aa90541393090d0b4)
通过AMap.Map构造函数构建地图对象,格式如下。
AMap.Map (container,options)
参数说明如下。
container:地图容器元素的ID或者DOM对象。
options:地图配置项,具体参考高德地图API。
第4步,使用HTML5的地理信息接口获取当前的地理位置。
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P92_40988.jpg?sign=1738866573-mkpm9kWa4JnGjnES0O6Eo4e6gEWNiSkt-0-997bdf5b266457c25439448a2ca32fa7)
上面代码定义了getPosition函数,函数调用navigator.geolocation.getCurrentPosition接口,获取当前地理位置,该接口的详细说明请参考上节内容。
本例需要记录用户的运动轨迹,因此需要获取高精度位置,所以将options.enableHighAccuracy设置为true。在页面加载完毕后,调用定义的getPosition方法,获取当前地理位置。
第5步,获取地理信息之后,将当前位置设置为地图中心点,并放大地图。单击“开始记录”按钮,程序开始记录用户移动轨迹,代码如下:
![](https://epubservercos.yuewen.com/43C118/17214367505511406/epubprivate/OEBPS/Images/Figure-P92_40990.jpg?sign=1738866573-JkFNPm5hOOvriC8yLxnLdKlb0H6OBwuT-0-c7dd729856132203489260ec949266ed)
采用navigator.geolocation.watchPosition接口监听位置信息的变化,得到更新的经纬度信息。去掉低精度数据,以避免绘制轨迹时,轨迹线存在较大误差。该接口的参数和getCurrentPosition接口一致。获取定位数据的时候,可以依据实际情况,去掉定位精准度较低的数据。
watchPosition方法在非HTTPS的场景下无法获取定位权限。Chrome可以先通过getCurrentPosition方法获取定位权限。限于篇幅,这里就不细致地介绍绘制轨迹的方法,完整代码请参考本书源码。提示,在实际开发中,建议采用HTTPS协议,以得到更好的体验。