html5手机端定位

由于项目需要,不得不研究一下手机端的定位。

起初想到的是HTML5定位,本地测试下来,安卓没什么问题,IOS报错,提示不支持http协议。由于后端除了经纬度,还需要城市名之类的详细数据,便调研了一下高德地图。高德地图确实好用,拿到的数据很全面。很快调试完上了测试服务器,结果意外发现一个问题——就是在4G的情况下,微信和QQ直接就是无法获取位置!坑啊,无奈只能转换思路,利用微信JSSDK定位和QQ的接口分别获取到经纬度之后,通过高德地图查询位置的详细信息,当然在浏览器下还是直接利用高德地图来定位。项目结束后,我就苦笑说,还要兼容哪些app,我来搞定!

下面附上部分代码:

微信JSSDK,接口需微信签名,这边就略过了。

self.$loader.open()
window.wx.getLocation({
  type: ‘wgs84‘, // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入‘gcj02‘
  success: function (res) {
    let lat = res.latitude
    let lng = res.longitude
  },
  error: function (res) {
    // 关闭loader
    self.$loader.close()
    self.$alert({text: [‘获取位置失败‘]})
  }
})

QQ接口

self.$loader.open()
window.mqq.sensor.getLocation({allowCacheTime: 60}, function (retCode, latitude, longitude) {
  if (retCode === 0) {
    let lat = latitude
    let lng = longitude
  } else {
    self.$loader.close()
    self.$alert({text: [‘获取位置失败‘]})
  }
})

高德地图定位

var map = new window.AMap.Map(‘iCenter‘)
map.plugin(‘AMap.Geolocation‘, function () {
  let geolocation = new window.AMap.Geolocation({
    enableHighAccuracy: true, // 是否使用高精度定位,默认:true
    timeout: 10000,           // 超过10秒后停止定位,默认:无穷大
    maximumAge: 600000,            // 定位结果缓存0毫秒,默认:0
    convert: true,            // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true
    showButton: false,         // 显示定位按钮,默认:true
    buttonPosition: ‘LB‘,     // 定位按钮停靠位置,默认:‘LB‘,左下角
    buttonOffset: new window.AMap.Pixel(10, 20), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
    showMarker: false,         // 定位成功后在定位到的位置显示点标记,默认:true
    showCircle: false,         // 定位成功后用圆圈表示定位精度范围,默认:true
    panToLocation: false,      // 定位成功后将定位到的位置作为地图中心点,默认:true
    zoomToAccuracy: false       // 定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
  })
  map.addControl(geolocation)
  geolocation.getCurrentPosition()
  window.AMap.event.addListener(geolocation, ‘complete‘, onComplete) // 返回定位信息
  window.AMap.event.addListener(geolocation, ‘error‘, onError)       // 返回定位出错信息
  function onComplete (result) {
    let city = result.addressComponent.city || result.addressComponent.province
    let lat = result.position.lat
    let lng = result.position.lng
  }
  function onError () {
    // 关闭loader
    self.$loader.close()
    self.$alert({text: [‘获取位置失败‘]})
  }
})

高德获取详细信息

let lnglatXY = [lng, lat] // 已知点坐标
var geocoder = new window.AMap.Geocoder({
  radius: 1000
})
geocoder.getAddress(lnglatXY, function (status, result) {
  if (status === ‘complete‘ && result.info === ‘OK‘) {
    let city = result.regeocode.addressComponent.city || result.regeocode.addressComponent.province
  }
})

高德查询附近关键词

window.AMap.service([‘AMap.PlaceSearch‘], function () {
  var placeSearch = new window.AMap.PlaceSearch({ // 构造地点查询类
    pageSize: 10,
    pageIndex: 1,
    city: ‘citycode‘, // 城市代码
    map: map,
    panel: ‘panel‘
  })
  // 关键字查询 经纬度附近多少米
  placeSearch.searchNearBy(‘keyword‘, [lng, lat], 5000, function (status, result) {
    if (status === ‘complete‘ && result.info === ‘OK‘) {
      let arr = []
      let list = result.poiList.pois
      for (let i = 0; i < list.length; i++) {
        arr.push({
          title: list[i].name,
          value: list[i].address,
          lat: list[i].location.lat,
          lng: list[i].location.lng,
          distance: list[i].distance
        })
      }
      // 排序
      arr.sort(function (a, b) {
        return a.distance > b.distance
      })
    }
    // 关闭loader
    self.refresh = true
    self.$loader.close()
  })
})

以上代码仅供参考,详情联系本人,邮箱:[email protected]

时间: 2024-10-12 22:49:59

html5手机端定位的相关文章

HTML5手机端拍照上传

1.accept="image/*" capture="camera" 自动调用手机端拍照功能 accept="image/*" capture="camera" 2.当表单提交时候有文件的时候,需要加上 var formData = new FormData($( "form" )[0]); 3.示例代码: <!DOCTYPE html> <html> <head> &

HTML5手机端手指滑动上拉加载代码

在线预览   源码下载 HTML5手机端手指滑动上拉加载代码是一款通过jquery实现tab切换和上拉加载更多的效果,适用于手机端页面开发.该特效适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器. 加入前端爱好者QQ群(123235875) 点击加群,共同交流进度!

html5手机端播放音效不卡的方法

html5手机端播放音效不卡的方法线下载http://wxserver.knowway.cn/solosea/js/audioEngine.js 这个是性能不错 然后直接播放音效就可以了 audioEngine.playEffect('/solosea1/music/laidian.mp3', false); 如果切换不了 可以先stop 然后再play audioEngine.stopEffect('/hcfabuhui/music/2.mp3'); 如果延迟 是其他代码性能影响了 预加载也没

HTML5+ 手机端录音和播放录音

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>录音播放</title> <script type=&quo

HTML5+ 手机端相册的操作

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>WebApp启动页</title> <script type

html5手机端的点击弹出侧边滑动菜单代码

效果预览:http://hovertree.com/texiao/html5/19/ 本效果适用于移动设备,可以使用手机等浏览效果. 源码下载:http://hovertree.com/h/bjaf/mwvn0mxi.htm 本实例用到了toggleClass方法,请参考:http://hovertree.com/h/bjaf/attributes_toggleclass.htm 代码如下: 1 <!doctype html> 2 <html lang="zh">

解决HTML5手机端字体小的问题

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> 这样,在手机上显示的字体大小才正常

手机端APP/ 手机浏览器 Html5自动定位城市

第一步:简单了解 html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置. window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置 int watchCurrentPosition(onSuccess,onError,options);//持续获取当前用户位置 void clearWatch

手机端小问题整理

1,tap后会出现一个半透明的灰色背景.起初以为是outline作怪,加上后发现没反应.最后发现是tap后的背景高亮,要重设这个表现,则须要设置-webkit-tap-highlight-color为所需色彩.直接透明吧:a,img,button,input,textarea{-webkit-tap-highlight-color:rgba(255,255,255,0);} 2,另外,怎样去掉textarea,input的默认样式(IOS上的圆角及内阴影等,Android未測试):input,t