- 问题分析
- 问题
- 原始Html5获取经度和纬度代码
- 问题产生原因
- 解决方案
需求:
- 在微信公众号获取用户的经纬度,识别用户所在城市;
- 根据数据库存储的店铺地址,调用百度地图API换算距离,将用户附近店铺根据距离远近排序展示给用户,点击附近店铺可进入百度地图导航界面
问题分析
问题:
使用Html5去获取用户的定位信息,即经度和纬度。在安卓手机上是可以正常获取的,但是在苹果IOS手机上是无法获取的,会提示错误信息,截图如下,并附原始获取用户的经度和纬度的代码:
IOS手机错误提示为:
翻译为:调用者没有权限使用地理定位服务
//没有权限使用地理定位服务
origin does not have permission to use geolocation service
截图如下:
原始Html5获取经度和纬度代码
以下代码在安卓可以获取经纬度,在IOS不可以,会提示上述错误
<script type="text/javascript">
$(function(){
var options ={};
//判断手机是否支持该功能,并获取经纬度
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(success,error,options);
}
else
{
alert('你的浏览器不支持定位功能');
}
//成功的回调
function success(lo,la)
{
var la = position.coords.latitude;
var lo = position.coords.longitude;
alert('纬度'+la);alert('经度'+lo);
//something.......
}
//失败的回调
function error(errorCode)
{
alert('获取失败,原因:'+errorCode.message);
}
})
</script>
问题产生原因
苹果的IOS做了限制,如果需要使用IOS的服务,必须是HTTS协议的域名,不能是HTTP。而博主公司的域名是HTTP的,所以直接使用HTML5调用是不被IOS允许的。
解决方案
思路:
调用腾讯地图接口,腾讯接口会使用HTTPS协议去调用html5拿到用户经纬度,然后返回给我。
代码如下:
1、引入JS
<script type="text/javascript" src="https://3gimg.qq.com/lightmap/components/geolocation/geolocation.min.js "></script>
2、获取经纬度
<script type="text/javascript" >
//填入自己在腾讯地图开放平台申请的KEY
var geolocation = new qq.maps.Geolocation("IRVBZ-GVWRK-3HHJV-ARRRR-QMQCS-XXXX", "myapp");
var options = {timeout: 8000};
geolocation.getLocation(sucCallback, errCallback,options);
//成功的回调
function sucCallback(position)
{
var mapInfo=JSON.stringify(position, null, 4);
var jsonMapInfo=eval('(' + mapInfo + ')');
//alert("经度"+jsonMapInfo.lng+"维度"+jsonMapInfo.lat);
success(jsonMapInfo.lng,jsonMapInfo.lat);
}
//失败的回调
function errCallback()
{
alert("定位失败!");
}
//业务逻辑
function success(lo,la)
{
//拿到经纬度的业务逻辑...
}
</script>
参考链接:
http://science.china.com.cn/2016-09/14/content_9034800.htm
http://lbs.qq.com/tool/component-geolocation.html
http://lbs.qq.com/
好吧,到此问题就差不多解决了,非常感谢热心博主–时光城主的指点