这种方式实现起来 ,亲测定位不准,可能是在室内的缘故,需要再进行测试。记录下来,以供参考。
环境 ionic2 下。 步骤如下
经纬度的获取用两中方式。
方案1:
使用html5 浏览器的获取经纬度,不是很准确,代码如下。
<script>
function getLocation(){
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(showPosition,showError);
}else{
alert("浏览器不支持地理定位。");
}
}
function showError(error){
switch(error.code) {
case error.PERMISSION_DENIED:
alert("定位失败,用户拒绝请求地理定位");
break;
case error.POSITION_UNAVAILABLE:
alert("定位失败,位置信息是不可用");
break;
case error.TIMEOUT:
alert("定位失败,请求获取用户位置超时");
break;
case error.UNKNOWN_ERROR:
alert("定位失败,定位系统失效");
break;
}
}
function showPosition(position){
var lat = position.coords.latitude; //纬度
var lag = position.coords.longitude; //经度
console.log('纬度:'+lat+',经度:'+lag);
alert('纬度:'+lat+',经度:'+lag);
}
getLocation();
</script>
方案2:
接入百度地图中浏览器获取地址的方案。
1.百度中注册创建应用获取 AK.
2.在 项目的工程中引入这个script.
3.在ts 文件中加入引用
2 关键代码如下: //参考百度Demo
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
alert('您的位置:'+r.point.lng+','+r.point.lat);
},{enableHighAccuracy: true})
方式1 :引入了jquery库 前端获取 (注意:output 输出格式 示例 这种方式是返回的json格式,也可以解析成xml格式 )
showPosition(a,b) //蚕食列表: 纬度,精度
{
var latlon = a+','+b;
//百度地图接口
var url = "http://api.map.baidu.com/geocoder/v2/?ak=C93b5178d7a8ebdb830b9b557abce78b&callback=renderReverse&location="+latlon+"&output=json&pois=0";
console.log(url);
$.ajax({
type: "GET",
dataType: "jsonp",
url: url,
beforeSend: function(){
alert("正在定位"); //定位解析中
},
success: function (json) {
if(json.status==0){
alert(json.result.formatted_address); //获取地址
alert(json.result.addressComponent.city.replace(/市/,"")); //城市
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("地址位置获取失败");
}
});
}
解析数据格式为xml 的关键代码:
showPosition(position){
var lat = position.coords.latitude; //纬度
var lag = position.coords.longitude; //经度
console.log('纬度:'+lat+',经度:'+lag);
//alert('纬度:'+lat+',经度:'+lag);
let location="location"+lat+","+lag;
//location=39.930362,116.351577
let url:string="http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&"+location+"&output=xml&pois=1&ak=ZvHBi1sMixcYD5na40b0NxIv";
this.http.get(url)
.timeout(5000)
.toPromise()
.then(response => {
console.log(response.text());
//result GeocoderSearchResponse
$(response.text()).find("result").each(function() {
var field = $(this);
var dataType = field.find("formatted_address").text();//读取子节点的值
console.log(dataType); //得到解析的地址
alert(dataType);
});
// alert(resp);
})
.catch(error=> {
});
}
方式2 :经纬度传后台,通过百度地图接口解析获取地址。
总结: 经纬度获取的时候偏差很大,解决方法可以尝试,制作插件,引入百度地图的android sdk 进行封装。
据说使用 Geolocation ,在ios 上是可以的,但是在安卓上使用就呵呵了。