Ionic 2 - 地理位置超时错误
Ionic 2 - Geolocation timeout error
我想在每次点击按钮时检测纬度和经度。
我尝试在许多网站和博客上进行搜索,但没有找到任何具体的解决方案。
我还安装了 cordova-plugin-geolocation 并像这样使用:
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Platform } from 'ionic-angular';
import {Camera, CameraOptions} from '@ionic-native/camera';
import { Geolocation, Geoposition } from '@ionic-native/geolocation';
constructor(public navCtrl: NavController, public navParams: NavParams, private camera : Camera,
public geolocation: Geolocation, public platform: Platform) {
}
capturePhotos()
{
let GPSoptions = {timeout: 10000, enableHighAccuracy: true, maximumAge: 3600};
this.geolocation.getCurrentPosition(GPSoptions).then((position) => {
console.log("IN");
console.log(position.coords.latitude);
console.log(position.coords.longitude);
}, (error) =>
{
console.log('Error getting location', error);
});
}
收到超时错误后,我将超时增加到 50000,但没有成功。
上面的 capturephoto 函数将被调用如下:
<ion-navbar hideBackButton side="left">
<ion-title style="margin-left: 0px;">
<div>
<ion-icon ios="ios-add" md="md-add" class="menuIcon" (click)="capturePhotos()"></ion-icon><span class="menuTitle">My Photos</span>
</div>
</ion-title>
</ion-navbar>
当我尝试在 android 模拟器中 运行 它时,当我第一次点击添加图标时,它会获取 Lat Long 但当我点击第二次或更多次时,它停止工作并抛出错误:
PositionError {} 代码:3 消息:"Timeout expired"
有这个答案phonegap geolocation allways fail on timeout,
您的代码似乎没问题,但是,要开始,请尝试不使用选项(默认选项)获取位置
这不是一个理想的解决方案(使用 watchPosition),但它适用于 iOS 我应该也适用于你。
home.ts
import {Component} from '@angular/core';
import {Platform, NavController} from 'ionic-angular';
import {Geolocation, Geoposition} from '@ionic-native/geolocation';
import 'rxjs/add/operator/filter';
import {last} from "rxjs/operator/last";
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
latest: Geoposition;
displayed: Geoposition;
timestamp: number = 0;
constructor(private platform: Platform, public navCtrl: NavController, private geolocation: Geolocation) {
this.latest = {
coords: {
altitude: 0,
heading: 0,
latitude: 0,
longitude: 0,
accuracy: 0,
altitudeAccuracy: 0,
speed: 0
},
timestamp: 0
};
this.displayed = this.latest;
this.platform.ready()
.then(() => {
const subscription = this.geolocation.watchPosition({
enableHighAccuracy: true,
maximumAge: 8000,
})
.filter((p) => p.coords !== undefined) //Filter Out Errors
.subscribe(position => {
if (position.coords !== undefined) {
this.latest = position;
}
});
});
}
refreshLocation() {
this.displayed = this.latest
}
}
home.html
<ion-header>
<ion-navbar>
<ion-title>
Movement information
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<button ion-button (click)="refreshLocation()" full>Update</button>
<ion-list>
<ion-item no-padding no-margin>
time: {{timestamp}}
</ion-item>
<ion-item no-padding no-margin>
lat: {{displayed.coords.latitude}}
</ion-item>
<ion-item no-padding no-margin>
long: {{displayed.coords.longitude}}
</ion-item>
<ion-item no-padding no-margin>
altitude: {{displayed.coords.altitude}}
</ion-item>
<ion-item no-padding no-margin>
heading: {{displayed.coords.heading}}
</ion-item>
<ion-item no-padding no-margin>
speed: {{displayed.coords.speed}}
</ion-item>
</ion-list>
</ion-content>
我通过进行以下更改解决了这个问题:
1) 我在 phone 设置中将定位模式设置为高精度。
2) 之后我将代码从 "this.geolocation" 更改为
"navigator.geolocation".
3) 我的回调代码中存在一些问题。当检测经纬度时,我正在调用另一个函数,并且我正在重定向到新页面。所以解决了这个回调问题,之后我每次点击按钮时都能成功获得经纬度值。
我遇到了同样的问题。在多次尝试并进行一些更改后,我观察到在设置参数 {enableHighAccuracy: true} 和 {timeout:"large value(may be more than 20 seconds)"} 时,我能够成功获取坐标。设置 {enableHighAccuracy:false} 或根本不提供参数会导致超时错误。
我发现这种行为很奇怪。
我希望这会有所帮助。
我想在每次点击按钮时检测纬度和经度。 我尝试在许多网站和博客上进行搜索,但没有找到任何具体的解决方案。 我还安装了 cordova-plugin-geolocation 并像这样使用:
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, Platform } from 'ionic-angular';
import {Camera, CameraOptions} from '@ionic-native/camera';
import { Geolocation, Geoposition } from '@ionic-native/geolocation';
constructor(public navCtrl: NavController, public navParams: NavParams, private camera : Camera,
public geolocation: Geolocation, public platform: Platform) {
}
capturePhotos()
{
let GPSoptions = {timeout: 10000, enableHighAccuracy: true, maximumAge: 3600};
this.geolocation.getCurrentPosition(GPSoptions).then((position) => {
console.log("IN");
console.log(position.coords.latitude);
console.log(position.coords.longitude);
}, (error) =>
{
console.log('Error getting location', error);
});
}
收到超时错误后,我将超时增加到 50000,但没有成功。 上面的 capturephoto 函数将被调用如下:
<ion-navbar hideBackButton side="left">
<ion-title style="margin-left: 0px;">
<div>
<ion-icon ios="ios-add" md="md-add" class="menuIcon" (click)="capturePhotos()"></ion-icon><span class="menuTitle">My Photos</span>
</div>
</ion-title>
</ion-navbar>
当我尝试在 android 模拟器中 运行 它时,当我第一次点击添加图标时,它会获取 Lat Long 但当我点击第二次或更多次时,它停止工作并抛出错误: PositionError {} 代码:3 消息:"Timeout expired"
有这个答案phonegap geolocation allways fail on timeout,
您的代码似乎没问题,但是,要开始,请尝试不使用选项(默认选项)获取位置
这不是一个理想的解决方案(使用 watchPosition),但它适用于 iOS 我应该也适用于你。
home.ts
import {Component} from '@angular/core';
import {Platform, NavController} from 'ionic-angular';
import {Geolocation, Geoposition} from '@ionic-native/geolocation';
import 'rxjs/add/operator/filter';
import {last} from "rxjs/operator/last";
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
latest: Geoposition;
displayed: Geoposition;
timestamp: number = 0;
constructor(private platform: Platform, public navCtrl: NavController, private geolocation: Geolocation) {
this.latest = {
coords: {
altitude: 0,
heading: 0,
latitude: 0,
longitude: 0,
accuracy: 0,
altitudeAccuracy: 0,
speed: 0
},
timestamp: 0
};
this.displayed = this.latest;
this.platform.ready()
.then(() => {
const subscription = this.geolocation.watchPosition({
enableHighAccuracy: true,
maximumAge: 8000,
})
.filter((p) => p.coords !== undefined) //Filter Out Errors
.subscribe(position => {
if (position.coords !== undefined) {
this.latest = position;
}
});
});
}
refreshLocation() {
this.displayed = this.latest
}
}
home.html
<ion-header>
<ion-navbar>
<ion-title>
Movement information
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<button ion-button (click)="refreshLocation()" full>Update</button>
<ion-list>
<ion-item no-padding no-margin>
time: {{timestamp}}
</ion-item>
<ion-item no-padding no-margin>
lat: {{displayed.coords.latitude}}
</ion-item>
<ion-item no-padding no-margin>
long: {{displayed.coords.longitude}}
</ion-item>
<ion-item no-padding no-margin>
altitude: {{displayed.coords.altitude}}
</ion-item>
<ion-item no-padding no-margin>
heading: {{displayed.coords.heading}}
</ion-item>
<ion-item no-padding no-margin>
speed: {{displayed.coords.speed}}
</ion-item>
</ion-list>
</ion-content>
我通过进行以下更改解决了这个问题:
1) 我在 phone 设置中将定位模式设置为高精度。
2) 之后我将代码从 "this.geolocation" 更改为 "navigator.geolocation".
3) 我的回调代码中存在一些问题。当检测经纬度时,我正在调用另一个函数,并且我正在重定向到新页面。所以解决了这个回调问题,之后我每次点击按钮时都能成功获得经纬度值。
我遇到了同样的问题。在多次尝试并进行一些更改后,我观察到在设置参数 {enableHighAccuracy: true} 和 {timeout:"large value(may be more than 20 seconds)"} 时,我能够成功获取坐标。设置 {enableHighAccuracy:false} 或根本不提供参数会导致超时错误。
我发现这种行为很奇怪。 我希望这会有所帮助。