通过百度API实现定位功能:
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function (r) {
if (this.getStatus() == BMAP_STATUS_SUCCESS) {
var mk = new BMap.Marker(r.point);
// currentLat = r.point.lat;
// currentLon = r.point.lng;
alert(r.point.lat)
var pt = new BMap.Point(currentLon, currentLat);
var geoc = new BMap.Geocoder();
geoc.getLocation(pt, function (rs) {
var addComp = rs.addressComponents;
var texts = addComp.district + "-" + addComp.street + "-" + addComp.streetNumber;
alert(texts);
});
}})
优点:不需要升级网页为https
缺点:每一次获取经纬度系统都会询问用户
通过H5实现定位功能:
h5Locate(){
let _this=this;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(position=>{
let getLongitude = position.coords.longitude; //position就是我们通过api获取的信息,而我们想获取的经纬度就在coords下,随后将经纬度分别赋值给外部data设定好的变量
let getLatitude = position.coords.latitude; //记住如果这里直接写this可能会导致找不到外部的变量而报错,所以提前设置一下this的指向
// alert(getLongitude + "" + getLatitude); //弹出经度测试
// _this.coordsToPos(getLongitude, getLatitude);
},err=>{
var errorType = [
"您拒绝共享位置信息",
"获取不到位置信息",
"获取位置信息超时"
];
Toast(errorType[err.code - 1]);
});
} else {
Toast("对不起,您的设备不支持定位!");
}
},
优点:浏览器定位,不需要依赖
缺点:需要网站协议为https,才能获取定位
H5+(PLUS)定位:
//定位获取经纬度
getLocation() {
var _this = this;
if (navigator.geolocation) {
plus.geolocation.getCurrentPosition(
//locationSuccess 获取成功的话
function(position) {
let getLongitude = position.coords.longitude; //position就是我们通过api获取的信息,而我们想获取的经纬度就在coords下,随后将经纬度分别赋值给外部data设定好的变量
let getLatitude = position.coords.latitude; //记住如果这里直接写this可能会导致找不到外部的变量而报错,所以提前设置一下this的指向
// alert(getLongitude + "" + getLatitude); //弹出经度测试
// _this.coordsToPos(getLongitude, getLatitude);
}, //locationError 获取失败的话
function(error) {
var errorType = [
"您拒绝共享位置信息",
"获取不到位置信息",
"获取位置信息超时"
];
Toast(errorType[error.code - 1]);
}
);
}
},
优点:不需要升级HTTPS,不会每次获取定位都询问用户
缺点:需要打包为5+APP,才能使用
将经纬度转换为地址:
coordsToPos(longitude, latitude) {
let _this = this;
let point = new BMap.Point(longitude, latitude);
let geoc = new BMap.Geocoder();
geoc.getLocation(point, rs => {
let addComp = rs.addressComponents;
let addr =
addComp.province +
addComp.city +
addComp.district +
addComp.street +
addComp.streetNumber;
// this.pmTakeSample.sampleAddress=addr;
});
},
注:该方法需要百度API的支持,将经度和纬度转化为实际地址