2017-10-11 5 views
1

Ich möchte jederzeit den Breiten- und Längengrad erkennen, wenn ich auf die Schaltfläche klicke. Ich habe versucht, auf vielen Seiten und Blogs zu suchen, aber keine spezifische Lösung zu erhalten.Ionic 2 - Geolocation-Timeout-Fehler

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); 
     }); 
} 

Nachdem ich Timeout-Fehler ich das Timeout auf 50000 erhöht, aber ohne Erfolg: Ich habe auch cordova-plugin-Geolocation und verwendet wie diese installiert.

<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> 

Wenn ich es in Android-Emulator laufen zu lassen versuchen, es Lat Long holen, wenn ich zum ersten Mal, klicken Sie auf Hinzufügen-Symbol, aber wenn ich auf der zweiten oder mehr Zeit klicken zum Anschlag: Above capturephoto Funktion wie unten genannt werden arbeiten und führt den Fehler: PositionError {} code: 3 Nachricht: "Timeout abgelaufen"

+0

Setzen Sie 'enableHighAccuracy: false' und überprüfen Sie. – hrdkisback

+0

Tut mir leid, es funktioniert nicht. – Aparna

+0

'lass GPSoptions = {timeout: 10000, enableHighAccuracy: true, maximumAge: 3600};' funktioniert gut in meinem Projekt. – hrdkisback

Antwort

1

beschloss ich dieses Problem, indem Sie die folgenden Änderungen zu tun:

1) Ich meine Lage Modus hoher Genauigkeit eingestellt in meinem Telefoneinstellungen.

2) Danach habe ich den Code von "this.geolocation" in "navigator.geolocation" geändert.

3) Es gab ein Problem in meinem Code mit Callbacks. Als ich nach lat lon suchte, rief ich eine andere Funktion an, und ich leitete auf die neue Seite um. Also habe ich dieses Callback Problem gelöst und danach bekomme ich lat lon Werte jedes Mal wenn ich auf den Button klicke.

0

es diese Antwort ist phonegap geolocation allways fail on timeout,

Ihr Code in Ordnung zu sein scheint, zu jedoch zu beginnen, versuchen zu getPosition ohne Optionen (Standardoptionen)

+0

Nun, ich habe zuerst meinen Code ohne Optionen entwickelt, aber es funktionierte nicht einmal beim ersten Mal, also habe ich Optionen hinzugefügt. So gibt es mir lat lange, wenn ich zum ersten Mal auf das Symbol klicke. Auch ich habe diesen Link durchgesehen, aber keine der Lösungen scheint für mich zu funktionieren. Ist es etwas, dass ich Geolocation-Parameter zurücksetzen muss oder irgendetwas, um den Lat wieder zu holen? Vielen Dank. – Aparna

0

Dies ist keine ideale Lösung (mit WatchPosition), aber es funktioniert für mich auf iOS und es sollte für Sie arbeiten.

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> 
+0

Hey Philip vielen Dank für deine Antwort und ich habe deinen Code in meiner App ausprobiert. Es wird jetzt kein Zeitüberschreitungsfehler ausgelöst, aber wenn ich zum zweiten Mal auf die Schaltfläche klicke, ist der Breiten- und Längengradwert gleich 0. – Aparna

+0

Ich habe festgestellt, dass es manchmal am Anfang besonders seltsame Werte gibt. Nicht sicher, worum es geht. Ich nehme an, du könntest auch die Ausreißer herausfiltern. –