欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
在这里,我们要结合Geolocation开发一个LBS(基于位置的服务)的应用。
 
1. LBS应用开发示例
在5年前,我们不敢想象会有如此众多的供应商提供免费的电子地图服务,而现在,开发者拥有众多选择:阿里云电子地图,百度电子地图,新浪电子地图,谷歌电子地图等。这里我们演示的是阿里云电子地图。
 
下面表示一个典型的LBS服务,通过GPS,Wi-Fi或其他方式查找设备所在的位置信息,通过此信息,在方圆1000米的范围内查找所有的酒店,总共前10个酒店显示在地图上。
 
具体示例代码如下所示。
 
<html  xmlns = “ http://www.w3.org/1999/xhtml” >
<head>
  <meta  charset = “ UTF-8”  />
 
  <title>定位功能</ title>
  <meta  http-equiv = “ pragma“  content = ” no-cache“  />
  <meta  name = ” viewport“  content = ”宽度=设备宽度,高度=设备高度,初始比例= 1.0,最小比例= 1.0,最大比例= 1.0 ,user-scalable = no“  />
  <link  href = ” opera.css“  rel = ”stylesheet“  type = ” text / css“ />
  <script  src = “ http://api.ditu.aliyun.com/map.js”  type = “ text / javascript” >
</ script> <!-上面提到的是阿里云地图->
 
  <脚本 类型= “ text / javascript”  charset = “ utf-8”  src = “ foropera.js” >
</ script>
</ head>
 
<body>
  <div  id = “ divLayer” 样式= “ background-color:#333 ; font-size:20px; color:#FFF; margin-top:200px; margin -left:0px; text-align:center; height:40px; line-height:40px;“ >
 
  
 
   = “ helpme” 样式= “不透明度:0.9;位置:绝对; z-index:1000;顶部:100px;左侧:20px;显示:无;背景颜色:#333; -webkit-border-radius:15px;右侧:20px;“ >
    <center  style = “ margin-left:10px; margin-right:10px; border-bottom:1px#777 solid;” >
      <span  style = “ color:#fff; height:30px; line-height:60px; font-size:26px;” >定位功能</ span>
    </ center>
 
    <div  style = “ color:#ccc; font-size:18px; margin-left:20px; margin-right:20px; margin-top:16px;” >
 
    </ div> <br  />
 
    <center>
      <button  onclick = “ hiddeDiv('helpme')”“  style = ” opacity:1; background-color:#777; border:0px; height:35px; line-height:25px ; color:#eee; width:140px; font-size:18px; -webkit-border-radius:5px;“ >关闭提示</ button>
    </ center> <br  />
  </ div>
 
  <div  id = “ help”  style = “ z-index:1000; position:absolute; left:0px; top:30px;” > </ div> <script  type = “ text / javascript” >
// <!
 
'helpme')。样式.display = 'none' ;
  }
  函数showhelp(){
  document.getElementById('helpme')。样式.display = '' ;
  }
  // ]] >
  </ script>
 
  <div  id = “ mapDiv”  style = “ width:480px; height:800px” > </ div>
 
  <div  id = “ lsResultDiv” > </ div> <script  type = “ text / javascript“ >
// <![CDATA [
  $('+ window.innerWidth + “ px; height:” + window.innerHeight + “
  px ”;
  function func_control(){
  alert('此处可以定制为某项功能');
  }
  Jla.require(“ Ali.Map.MapType.AliMobile”); //加载手机地图的功能
  Jla.onReady(onLoad);
  函数onLoad(){
  $('divLayer')。style.top =((window.innerHeight / 2)-20)+ “ px” ;
  $('divLayer').style.left =((window.innerWidth / 2)-150)+ “ px” ;
  $('divLayer').style。
  $('divLayer').innerHTML = '正在加载地图......' ;
  var hasGeolocation = !!(navigator.geolocation);
  if(!hasGeolocation){
  alert(“浏览器不支持Geolocation”);
  }
  var map,markers = [];
  var map = new AliMap(“ mapDiv”); //使用id为mapDiv的层创建一个地图对象
  AliEvent.addListener(map,  “ click”,function(){ //监听事件
  alert(“有人放置了地图。”);
  });
  localStorage.wd = “ 0” ; //如果没有获取到任何地理坐标,则直接替换为0
  localStorage.jd = “ 0” ;如果没有获取到任何地理坐标,则
  直接替换为0 showmap(localStorage.wd,localStorage.jd,localStorage.cx); //展示地图
  var geolocationOptions = {timeout:30000,enableHighAccuracy:true,maximumAge:5000};
  $('divLayer').innerHTML = '正在获取坐标......' ;
  navigator.geolocation.getCurrentPosition(geolocationSuccess,geolocationError,
  geolocationOptions);
  function geolocationSuccess(position){
  alert(“北纬:” + position.coords.latitude + “,东经:” + position.coords.longitude);
  //打开当前的经纬度坐标
  localStorage.wd = position.coords.latitude;
  localStorage.jd = position.coords.longitude;
  localStorage.cx = position.coords.heading;
  showmap(localStorage.wd,localStorage.jd,localStorage.cx); //展示地图
  }
  setInterval(function(){
  //每隔20秒重新刷新地图
  showmap(localStorage.wd,localStorage.jd,localStorage.cx);
  },20000);
  function geolocationError(err){
  switch(err.code){
  case 1:
  $('divLayer').innerHTML = '坐标获取被拒绝,地图加载失败' ;
  休息;
  情况2:
  $('divLayer')。innerHTML = '连不上GPS卫星或网络断了' ;
  休息;
  情况3:
  $('divLayer').innerHTML = ';
  休息;
  默认值:
  $('divLayer').innerHTML = '发生严重异常,请刷新页面' ;
  休息;
  }
  }
  函数showmap(wd,jd,cx){
  $('divLayer').innerHTML = '正在展示数据......' ;
  //在该坐标处创建一个标记
  var MAPMAP = new AliLatLng(localStorage.wd,localStorage.jd);
  if(cx === null){
  alert('对不起,取不到当前朝向');
  }
  yycontrol = new AliMapOverviewControl({open:true}); //创建一个鹰眼控件
  map.addControl(yycontrol); //将鹰眼控件添加到地图
  //设置调用的地图类型为手机版地图
  map.setMapType(new(Jla.get(“ Ali.Map.MapType.AliMobile”))());
  map.centerAndZoom(MAPMAP,14); //定位地图
  search =新的AliLocalSearch(); //设置搜索结果处理函数
  AliEvent.addListener(search,“ searchcomplete”,onSearchComplete);
  AliEvent.addListener(search,“ searchexception ”,onSearchException);
  var search_keyword = “酒店” ;
  var search_radius = 1000; //搜索
  国会是1000米search.keyword = search_keyword; //设置关键字
  search.pageSize = 10; //设置返回结果数量
  search.center = map.getCenter();
  search.execute(); //开始搜索
  marker = new AliMarker(MAPMAP); //将标记添加到地图
  //创建事件监视器,在MapMove函数
  map.openInfoWindow(MAPMAP,'我的位置','<div>附近的蓝点,是方圆
  '+ search_radius +'米内的'+ search_keyword +' < \ / div> ');
  var icons = [
  newAliIcon(“ icon1.gif”,{x:16,y:27},{x:8,y:27}),
  newAliIcon(“ icon2.png”,{x:23,y:29} ,{x:13,y:14}),
  newAliIcon(“ icon3.png”,{x:49,y:59},{x:24,y:56})
  ]];
  marker.setIcon(icons [1]);
  map.addOverlay(marker);
  椭圆形=新
  AliOvalOverlay(map.getProjection()。getSquare(MAPMAP,search_
  radius),{editSymbolCtl:128}); //以中心为中心,3000米为直径的圆
  map.addOverlay(oval);
  椭圆形。开始编辑({keepRatio:true});
  椭圆形.endEditting({keepRatio:true});
  函数onSearchException(exception){
  alert(exception.message);
  }
  函数onSearchComplete(){  //处理搜索结果
  变量标记,resultDiv = document.getElementById(“ lsResultDiv”);
  AliEvent.deposeNode(resultDiv,true);
  while(marker = markers.pop()){
  map.removeOverlay(marker);
  }
  for(var i = 0; i < search.points.length; i++){
  var  poi = search.points [ i ];
  标记=新AliMarker(poi.latlng,{标题:POI名称});
  映射.addOverlay(marker);
  //将标记的信息浮窗内容记录下来
  marker._desc = “我是第” +(i + 1)+ “个” + search_keyword;
  AliEvent.bind(marker,  “ click”  ,marker,onMarkerclick);
  markers.push(marker);
  }
  }
  函数onMarkerclick(){
  //确保信息浮窗在视图范围内
  无功 infowin = this.openInfoWindow(此。标题,this._desc);
  infowin.moveIntoView();
  }
  $('divLayer').innerHTML = “” ;
  $('divLayer')。样式.top = “ 0px” ;
  $('divLayer')。样式.left = “ 0px” ;
  $('divLayer')。风格。width = “ 0px” ;
  $('divLayer')。样式.display = 'none' ;
  }
  }
  // ]] >
  </ script>
</ body>
 
2.本例小结
使用地理位置的过程中会出现某些意外情况,请读者在开发时注意。
(1)用户误拒绝位置共享,因此无法获得准确的地理信息。
(2)由于种种原因,虽然用户同意了位置共享,但是浏览器工作不正常,从而获得了地理信息。
(3)因硬件故障无法获得地理位置信息。
(4)以上错误都不存在,但由于过多密集的地面获取地址信息,网络无法立即响应变化,导致电子地图延迟定位。
 
Geolocation是HTML5应用中最容易见成效,最容易商业的一个API,希望大家多研究,多讨论,早日设计开发出“杀手级应用”。
 

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h61366.shtml