×

深圳网站建设—APP开发—网站制作—小程序开发_博纳网络公司

0755 -
82538016
82560826
网站制作资讯

APP开发HTML5是怎样解决查找路线功能的?

文章编辑:网站建设 文章来源:APP开发 浏览量:

  APP开发HTML5是怎样解决查找路线功能的?深圳APP开发公司本例演示一个生活中经常用到的场景,根据Google地图查找出行路线。路线查找需要提供起始位置和目的地位置。利用HTML5提供的获取地理位置信息,可以非常方便地定位到当前地理位置,然后提供目的地,就可以根据Google地图API查找出行路线。本例演示的路线查找功能也可以选择出行方式,包括自驾车、公交、步行、自行车4种方式。使用Chrome浏览器打开“4-3.使用Google地图查找路线.html”网页文件,运行效果如图4.10所示。
在“起始位置”一栏点击“使用当前位置作为起始位置”文字,运行效果如图4.11所示。
在“结束位置”一栏填写“西溪国家湿地公园”,选择“出行方案”为“公交”,然后点击“查找”按钮,运行效果如图4.12所示。
图中左侧以地图形式显示查找结果,标签A代表起始位置,标签B代表结束位置,图中右侧以文字的形式显示具体的路线信息。
设置“出行方案”为“驾车”,然后点击“查找”按钮,运行效果如图4.13所示。
设置“出行方案”为“自行车”,然后点击“查找”按钮,运行效果如图4.14所示。
提示没有找到自行车路线,因为Google地图目前只有美国地区支持自行车路线。设置出行方案为“步行”,然后点击“查找”按钮,运行效果如图4.15所示。
利用编辑器打开“4-3.使用Google地图查找路线.html”文件,样式部分代码如下:【代码4-3】
< style> body{ margin: 50px auto; width: 870px; padding: 20px; border: 1px solid
#c88e8e; border- radius: 15px; height: 100%; /* 设置 高度 自 适应 */ } .item { width: 430px; display: inline- block; padding- right: 2px;} /* 设置 ip 和 wifi 容器 的 宽度 并 左 浮动 */ .section{ padding: 5px;} .btn{ text- decoration: none; color: #c89191; font- size: 11px; } .btn: hover{ text- decoration: underline;} input, select{ border: #b9aaaa 1px solid; height: 22px; width: 200px; margin- left: 5px;} #map{ height: 400px; width: 430px; text- align: center;} /* 设置 地图 宽 高 */ .search{ /* 设置 查找 按钮 样式 */ padding: 4px 12px; text- decoration: none; cursor: pointer; /* 设置 光标 的 手 形 */ color: #333333; background- color: #f5f5f5; /* 设置 查找
查找 按钮 背景 色 */ border- radius: 4px; box- shadow: inset 0 1px 0 rgba( 255, 255, 255,. 2), 0 1px 2px rgba( 0, 0, 0,. 05); /* 设置 查找 按钮 阴影 */ } </ style>
HTML部分代码如下:
01 < p> 查找 路线< span id=" info"></ span></ p> 02 < div class=" section"> <!— 起始 位置 --> 03 < label for=" start"> 起始 位置</ label>< input type=" text" id=" origin" /> <!— 起始 位置 输入 框—> 04 < a href=" javascript:;" class=" btn" id=" user- origin"> 使用 当前 位置 作为 起始 位置</ a> 05 </ div> 06 < div class=" section"> <!— 结束 位置 --> 07 < label for=" end"> 结束 位置</ label>< input type=" text"
id=" destination" /> <!— 结束 位置 输入 框 --> 08 < a href=" javascript:;" class=" btn" id=" user- destination"> 使用 当前 位 置 作为 结束 位置</ a> 09 </ div> 10 < div class=" section"> 11 < label for=" travelMode"> 出行 方案</ label> <!— 出行 方案 选择--> 12 < select id=" travelMode"> 13 < option value=" TRANSIT"> 公交</ option> <!— 选择 公交--> 14 < option value=" DRIVING"> 驾车</ option> <!— 选择 驾车--> 15 < option value=" BICYCLING"> 自行车</ option> <!— 选择 自行车--> 16 < option value=" WALKING"> 步行</ option> <!— 选择 步行--> 17 </ select> 18 < a href=" javascript:;" class=" search" id=" search"> 查找</ a><!— 查找 路 线 按钮--> 19 </ div> 20 < div id=" map" class=" item"> 加载 中...</ div> <!-- 地图 方式 显示 控 件--> 21 < div id=" directionsPanel" class=" item"></ div> <!— 文字 方式 显示 路线-->
第03行和第07行设计的输入框可以让用户自己输入路线查找的起始位置或者结束位置。第04行和第08行定义用户可以选择以当前位置作为起始或者结束位置。第12~17行定义了4种出行方式,分别为:
TRANSIT:公交。
DRIVING:驾车。
BICYCLING:自行车。
WALKING:步行。
01 var 02 gmap = document. querySelector("# map"), // 获取 地图 DOM 03 ginfo = document. querySelector("# info"), // 获取 显示 经纬度 DOM 04 origin = document. querySelector("# origin"), // 获取 起始 位置 输入 DOM 05 destination = document. querySelector("# destination"),// 获取 结束 位置 输入 DOM 06 userOrigin = document. querySelector("# user- origin"),
// 获取 使用 当前 作为 起始 位置 DOM 07 userDestination = document. querySelector("# user- destination"), // 获取 使用 当前 作为 结束 位置 DOM 08 travelMode = document. querySelector("# travelMode"), // 获取 出行 方式 DOM 09 search = document. querySelector("# search"), // 获取 查找 按钮 DOM 10 directionsPanel = document. querySelector("# directionsPanel"), // 获取 文字 结果 DOM 11 map, // 定义 Google 地图 变量 12 currentMaker, // 定义 当前 位置 标记 13 currentPosition, // 定义 当前 位置 信息 14 directionsService= new google. maps. DirectionsService(),// 初始化 获取 路线 服务 15 directionsDisplay = new google. maps. DirectionsRenderer(),// 初始化 显示 路线 服务 16 showMap = function( position) {
17 currentPosition = new google. maps. LatLng( position. coords. latitude, position. coords. longitude); // 经纬度 18 // 地图 参数 19 var options = { zoom: 14, center: currentPosition, mapTypeId: google. maps. MapTypeId. ROADMAP }; 20 map = new google. maps. Map( gmap, options), // 地图 21 // 地图 位置 标记 22 currentMaker = new google. maps. Marker({ position: currentPosition, map: map, title: " 用户 位置 "}); 23 ginfo. innerHTML = "{ 当前 位置( 纬度: " + position. coords. latitude 24 + " ,经度: " + position. coords. longitude + " ) }";// 显示 定位 结果 25 directionsDisplay. setMap( map); // 地图 上 显示 路线 26 directionsDisplay. setPanel( directionsPanel);
// 显示 路线 查找 文字 结果 27 }, 28 userSelectionCurrent = function( e){ // 设置 当前 位置 作为 查找 点 29 var prev = this. previousElementSibling; // 获取 input 元素 30 prev. value = ' 我的 位置 '; // 设置 input 元素 的 值 31 prev. style. color = 'blue'; // input 元素 字体 设置 为 蓝色 32 prev. isCurrent = true; // 设置 input 使用 当前 位置 来 计算 33 }, 34 cancelCurrent = function(){ 35 this. style. color = '#111'; // 设置 input 元素 字体 颜色 为 #111 36 this. isCurrent = false; // 设置 不使 用 当前 位置 作为 查找 点 37 }, 38 bind = function(){
39 [userOrigin, userDestination]. forEach( function (item){ 40 item. addEventListener(' click', userSelectionCurrent, false); // 绑 定使 用 当前 位置 的 点击 事件 41 // 如果 input 元素 的 值 是 人为 改变 的, 就 设置 不使 用 当前 位置 作为 查找 点 42 item. previousElementSibling. addEventListener(' change', cancelCurrent, false); 43 }); 44 search. addEventListener(" click", calcRoute, false);// 绑 定 查找 按钮 事件 45 }, 46 calcRoute = function(){ // 路线 查找 函数 47 var 48 start = origin. isCurrent ? currentPosition : origin. value, // 获取 路线 的 起始 位置
49 end = destination. isCurrent ? currentPosition : destination. value, // 获取 路线 的 结束 位置 50 selectedMode = travelMode. value, // 获取 路线 的 出行 方式 51 request = { // 封装 route 函数 参数 52 origin: start, 53 destination: end, 54 travelMode: google. maps. TravelMode[ selectedMode] 55 }; 56 // 调用 Google 地图 API 请求 路线 57 directionsService. route( request, function( response, status) { 58 if (status == google. maps. DirectionsStatus. OK) { // 找到 路线 59 directionsPanel. innerHTML = ''; // 清除 文字 结果 60 directionsPanel. style. color = ''; // 清除
清除 文字 结果 颜色 61 directionsDisplay. setMap( map); // 在 地图 上 显示 路线 62 directionsDisplay. setDirections( response); // 显示 文字 结果 63 currentMaker. setMap( null); // 清除 位置 标记 64 }else{ 65 directionsPanel. style. color = 'red'; 66 // 没有 找到 路线 67 if( status === google. maps. DirectionsStatus. ZERO_ RESULTS){ 68 // 自行车 查找 的 特殊 处理 69 if( selectedMode === 'BICYCLING'){ 70 directionsPanel. innerHTML =' 没有 找到 路线, 可能 是 不支持 当前 国家 '; 71 }else{ 72 directionsPanel. innerHTML = ' 没有 找到 相关 路线 ';
73 } 74 }else if( status == google. maps. DirectionsStatus. NOT_ FOUND){ 75 directionsPanel. innerHTML = ' 地址 没有 找到 '; 76 }else{ 77 directionsPanel. innerHTML = ' 其他 错误: ' + status; 78 } 79 directionsDisplay. setMap( null); // 清除 上一次 显示 的 路线 80 currentMaker. setMap( map); // 显示 当前 的 位置 标记 81 } 82 }); 83 }, 84 getPosition = function(){ 85 var
86 errorHandler = function( error){ // 定位 出错 处理 函数 87 switch( error. code){ 88 case error. PERMISSION_ DENIED: // 定位 失败, 没有 权限 89 gmap. innerHTML = " 定位 被 阻止, 请 检查 您的 授权 或者 网络 协议( " + error. message + ")"; 90 break; 91 case error. POSITION_ UNAVAILABLE: // 定位 失败, 不 可达 92 gmap. innerHTML = " 定位 暂时 无法 使用, 请 检查 您的 网络 (" + error. message + ")"; 93 break; 94 case error. TIMEOUT: // 定位 失败, 超时 95 gmap. innerHTML = " 您的 网络 较慢, 请 耐心 等待 ..."; 96 gmap. innerHTML = " 对不起, 定位 超时 "; //
超时 了 97 break; 98 } 99 }, 100 getCurrentPosition = function(){ // 定位 函数 101 navigator. geolocation. getCurrentPosition( showMap, errorHandler); 102 }; 103 return getCurrentPosition; // 返回 定位 函数 供 外部 调用 104 }(); 105 var init = function(){ 106 if (navigator. geolocation) { 107 gmap. innerHTML = " 定位 中 ..."; 108 getPosition(); // 定位 开始
109 bind(); 110 } else { 111 gmap. innerHTML = ' 您的 浏览器 不支持 地理 位置 '; // 定位 失败, 浏览器 不支持 112 } 113 }; 114 google. maps. event. addDomListener( window, 'load', init); // 入口 函数
第21行<divid="directionsPannel">元素的作用是把路线查找的文字结果显示在这里。JavaScript逻辑代码部分如下:
第17行在navigator.geolocation.getCurrentPosition函数的回调结果中用currentPosition记录定位的结果。如果是使用当前位置查找路线,那么这个结果在执行路线查找时会用到。
第28~33行定义“使用当前位置作为起始位置”和“使用当前位置作为结束位置”的事件处理函数,当用户点击按钮时,设置其对应的文本输入框的值为“我的位置”,并把字体颜色改为蓝色。然后设置变量isCurrent的值为true,用来标记要使用当前位置作为起始或者结束位置。
第34~37行取消使用当前位置作为查找条件。
提示当用户在输入框中输入文字时,表示用户不想使用当前位置来查找。
第38~45行定义了“使用当前位置作为起始位置”“使用当前位置作为结束位置”2个文本输入框和“查找”按钮的事件代理。
第46~83行是查找路线的处理函数。
第48~49行获取路线查找的起始和结束位置。如果使用当前位置,那么其值为第17行代码赋予变量currentPostion的值;如果不使用当前位置作为查找条件,就对应获取用户输入的文字。
第50行获取用户选择的出行方式。
第57行调用directionsService的route方法。该方法提供两个参数,第1个参数为查找条件(包括路线的起始、结束位置和出行方式等),第2个参数为查找结果的回调函数。回调函数中第一个参数是具体的路线结果,第2个参数代表查找结果的状态。提示要了解更多谷歌地图相关的查找路线的信息接口,读者可以参考https://developers.google.com/maps/documentation/javascript/reference#DirectionsService。第58行表示已经查找到了结果。
第61行表示如果找到路线,就在地图上显示出路线。
第62行在<divid="directionsPanel">上显示查找结果的文字方案。
第65~78行是没有正确查找到路线的错误处理逻辑。常见的有以下3种错误:OK:找到路线。NOT_FOUND:起点和终点中至少有一个位置没找到。ZERO_RESULT:起点和终点都找到了,但没有找到相关路线。好了,APP开发公司本文关于“
APP开发HTML5是怎样解决查找路线功能的?”的相关APP制作知识就分享到这里,谢谢关注,博纳网你络编辑整理。
 
 

当前文章链接:/construction/appkaifa/3126.html
如果您觉得案例还不错请帮忙分享:

[声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【qin@198bona.com 】,我们在确认后,会立即删除,保证您的版权。