【发布时间】:2020-02-02 15:33:39
【问题描述】:
我有一个监控设备位置的服务:
getLocation(opts): Observable<any> {
return Observable.create(observer => {
if (window.navigator && window.navigator.geolocation) {
window.navigator.geolocation.watchPosition((position) => {
observer.next(position);
}, (error) => {
switch (error.code) {
case 1:
observer.error('errors.location.permissionDenied');
break;
case 2:
observer.error('errors.location.positionUnavailable');
break;
case 3:
observer.error('errors.location.timeout');
break;
}
}, opts);
} else {
observer.error('errors.location.unsupportedBrowser');
}
});
}
然后在组件中检索经纬度:
ngOnInit() {
var source = this.locationService.getLocation({enableHighAccuracy:true, maximumAge:30000, timeout:27000});
source.subscribe(pos => {
this.lat = pos.coords.latitude;
this.long = pos.coords.longitude;
}, err => {
this.err = err;
console.log(err);
});
}
此代码在 macbook 和 iphone 上的浏览器中运行良好,即它可以在设备移动时检索和更新位置。
但在我的 ipad(wifi 只有没有 gps)上,它可以在第一次获得位置,然后几秒钟后,服务返回错误代码 2,即位置不可用并且浏览器停止更新位置。我不确定它是否停止工作或仍在运行但总是返回错误代码2。
我的问题是:
- watchPosition 是否需要 GPS 才能工作?但我的macbook 也没有gps。
- 如果发生错误并从 observable 返回,我需要重新订阅以再次获取数据(位置)还是等到错误消失。
【问题讨论】:
标签: angular typescript geolocation rxjs