热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

h5地理定位

在项目开发中,总免不了做一些定位的功能。特别是在电商的项目中,做地理定位再正常不过了。当然,说到定位,大家第一反应就是腾讯地

在项目开发中,总免不了做一些定位的功能。特别是在电商的项目中,做地理定位再正常不过了。当然, 说到定位,大家第一反应就是腾讯地图、百度地图、高德地图。不错,其实,我也是用这些。
其实,不管哪个厂家的地图,无外乎都是先拿到当前的经纬度,然后再跟据经纬度做地址解析。当然,最最最最重要的。就是你的协义必须必须是https,记住,是https,https。当然,你也可以不用https,只用http,不过,这样定位是不准确的。(如果用http协议,腾讯地图会定位到当前县/区的中心,而百度地图会定位到当前市市中心)

方法一:腾讯地图定位

最简单而且最粗爆的方法就是在html里面直接引入iframe



然后,在页面上就会出来一个地图

之后,在js中,写入以下函数

//注意,如果是用jQ写的话,这一段必须被外面一层的$(function(){})里面
//也就是说,下面的那一段函数必须写在$(function(){])里面
//而下面那一串函数的意思就是点击地图上下方的地址列表,它就会相应的定位到那儿
//而同时,也会拿到你当前所点击的地址中相应的一些地理信息
window.addEventListener('message', function (event) {// 接收位置信息,用户选择确认位置点后选点组件会触发该事件,回传用户的位置信息var loc = event.data;if (loc && loc.module == 'locationPicker') {//防止其他应用也会向该页面post信息,需判断module是否为'locationPicker'console.log(loc) //这儿拿到的就是经纬度还有一些详细的地址什么的,大家可以打印出来看看就明白了。let poiaddress = loc.poiaddress;let poiname = loc.poiname;//console.log(poiaddress + ' ' + poiname)$('#BaoXiuShenQing_XiangXiWeiZhi').val(poiaddress)$('#BaoXiuShenQing_XiangXiWeiZhi').css({fontSize:'12px'})}
}, false)

方法二:h5地理定位

然而,在h5中,也提供了一个地理定位的方法。该方法在菜鸟教程那儿也能很容易找到。

该方法的名字是 navigator.geolocation.getCurrentPosition(success,error);里面的参数有两个,一个是定位成功后的返回,另一个是定位失败的返回。

h5Position() {return new Promise((resolve, reject) => {//resolve({ bol: true, longitude: 116.104904, latitude: 24.277311 })if (navigator.geolocation) {let params = {enableHighAccuracy: true, //表示是否允许使用高精度geocode: true //是否解析地址信息。解析的地址信息保存到Position对象的address、addresses属性中//详细的参数可以参考 https://blog.csdn.net/weixin_30408739/article/details/99012875}navigator.geolocation.getCurrentPosition((position) => {let longitude = position.coords.longitude //经度let latitude = position.coords.latitude //纬度resolve({ bol: true, longitude: longitude, latitude: latitude })}, (error) => {reject({ bol: false, msg: '获取经纬度失败' })});} else {reject({ bol: false, msg: '您的设备不支持卫星定位,请手动选择' })}})
},

QQMap(longitude, latitude) { //腾讯地图里的经纬度解析实际地址:如 广东省广州市XXX....return new Promise((resolve, reject) => {let xy = latitude + ',' + longitude$.ajax({url: 'https://apis.map.qq.com/ws/geocoder/v1/?location=' + xy + '&key=你的key&get_poi=1',data: {output: 'jsonp' //这个必须得这么写},dataType: 'jsonp', //这个也一样,必须得这么写}).done(res => {let obj = {longitude: longitude,latitude: latitude,address: res.result.address,}resolve({ bol: true, xyAddress: obj, all: res })}).fail(err => {reject({ bol: false, msg: '获取地址失败,请手动选择' })})})
},

那么,这两串代码结合起来的话,就是长这么的样子

getAddress(){this.h5Position().then(res=>{let longitude = res.longitude;let latitude = res.latitude;return this.QQMap(longitude , latitude)}).then(res=>{//这儿得到的就是腾讯地图中用经纬度解析到的详细地址//里面是一个大对象,包含了当前定位的推荐地址和粗操地址//同时,也包含了当前定位中的周边地址,类似你打开微信定位里,有周边推荐的门店什么的console.log(res);})
}


推荐阅读
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • 本文讨论了使用bootstrapselect插件设置container后,选择完选项后options不隐藏的问题,给出了解决方法,并提供了相应的jsfiddle链接进行演示。 ... [详细]
  • 本文介绍了某点评网的搜索策略,包括名称和地址的匹配策略,模糊匹配的方法以及不同口音和拼音的近似发音。同时提供了一些例子来说明这些策略的应用。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • java.lang.Class.getDeclaredMethod()方法java.lang.Class.getDeclaredMethod()方法用法实例教程-方法返回一个Met ... [详细]
  • 重学前端学习笔记(十八)JavaScript的闭包和执行上下文
    笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系,笔者主要整理学习过程的一些要点笔记以及感悟,完整的可以加 ... [详细]
author-avatar
大豆子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有