我正在创建一个应用程序,用户,我工作的公司的成员,只需按下按钮并编写名称就可以按需注册兴趣点,然后将它们发送并存储到服务器。
但我对位置的准确性有疑问。我正在使用@ionic-native/geolocation
,即使我将enableHighAccuracy
设置为true
,我也收不到精确的位置。其中一些比他们拍摄的地方更远。
有没有办法只从GPS传感器获取地理位置?
我一直在谷歌搜索几个小时,但没有运气。也许我做错了什么。
这是我在客户端获取位置的代码:
obtenirPosicio(): Promise<Geoposicio> {
return new Promise<Geoposicio>((resolve, reject) => {
const OPCIONS_GPS = {} as GeolocationOptions;
OPCIONS_GPS.enableHighAccuracy = true;
OPCIONS_GPS.maximumAge = 0;
OPCIONS_GPS.timeout = 10000; // 10 segons de timeout per obtenir posicio GPS
this.gps.getCurrentPosition(OPCIONS_GPS).then(res => {
let nova_posicio = {} as Geoposicio;
nova_posicio.lat = res.coords.latitude;
nova_posicio.lng = res.coords.longitude;
resolve(nova_posicio);
}).catch(err => {
reject(err);
});
});
}
PS:我只是瞄准Android
答案 0 :(得分:0)
除非用户将位置模式设置为“仅设备”(即GPS),否则当位置模式为“高精度”时,Android位置管理器将通过GPS和非GPS源发送位置数据,因此有些人会是不准确的Wifi /蓝牙/单元格三角测量位置。
但是,您可以通过查看结果的coords.accuracy
属性来过滤掉这些属性,该属性表示位置的估计精确度。
确定您准备接受的最低准确度,然后拒绝任何不准确的准确度。
例如:
obtenirPosicio(): Promise<Geoposicio> {
return new Promise<Geoposicio>((resolve, reject) => {
const MIN_ACCURACY = 20; // metres
const OPCIONS_GPS = {} as GeolocationOptions;
OPCIONS_GPS.enableHighAccuracy = true;
OPCIONS_GPS.maximumAge = 0;
OPCIONS_GPS.timeout = 10000; // 10 segons de timeout per obtenir posicio GPS
this.gps.getCurrentPosition(OPCIONS_GPS).then(res => {
// Reject udpate if accuracy is not sufficient
if(!res.coords.accuracy || res.coords.accuracy > MIN_ACCURACY){
console.warn("Position update rejected because accuracy of"+res.coords.accuracy+"m is less than required "+MIN_ACCURACY+"m");
return; // and reject() if you want
}
let nova_posicio = {} as Geoposicio;
nova_posicio.lat = res.coords.latitude;
nova_posicio.lng = res.coords.longitude;
resolve(nova_posicio);
}).catch(err => {
reject(err);
});
});
}