Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cordova 离子2-地理位置超时错误_Cordova_Ionic2_Geolocation - Fatal编程技术网

Cordova 离子2-地理位置超时错误

Cordova 离子2-地理位置超时错误,cordova,ionic2,geolocation,Cordova,Ionic2,Geolocation,我想在每次点击按钮时检测纬度和经度。 我曾尝试在许多网站和博客上搜索,但没有得到任何具体的解决方案。 我还安装了cordova plugin geolocation,并使用如下方式: import { Component } from '@angular/core'; import { IonicPage, NavController, NavParams, Platform } from 'ionic-angular'; import {Camera, CameraOptions} from

我想在每次点击按钮时检测纬度和经度。 我曾尝试在许多网站和博客上搜索,但没有得到任何具体的解决方案。 我还安装了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 emulator中运行它时,当我第一次单击添加图标时,它将获取Lat Long,但当我第二次或更多时间单击时,它停止工作并抛出错误: 位置错误{}代码:3消息:“超时已过期”有这个答案


您的代码似乎很好,但是,首先,尝试不带选项的getposition(默认选项)

这不是一个理想的解决方案(使用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>

运动信息
更新
时间:{{timestamp}}
纬度:{{显示的.坐标.纬度}
long:{displated.coords.longitude}
高度:{显示的.坐标.高度}
标题:{displated.coords.heading}
速度:{displated.coords.speed}

我通过执行以下更改解决了此问题:

1) 我在手机设置中将我的定位模式设置为高精度

2) 之后,我将代码从“this.geolocation”更改为 “导航器。地理定位”


3) 我的代码中有一些回调问题。当检测lat-lon时,我调用了另一个函数,因此我重定向到了新页面。所以解决了这个回调问题,之后我现在每次点击按钮都能成功地获取lat-lon值。

我也遇到了同样的问题。在尝试多次修改后,我发现在设置参数{enablehightaccurity:true}和{timeout:“大值(可能超过20秒)”}时,我能够成功地获得坐标。设置{enableHighAccurance:false}或根本不提供参数会导致超时错误

我觉得这种行为很奇怪。
我希望这会有所帮助。

设置
enableHighAccurance:false
并检查。很抱歉,它不起作用。
让GPSoptions={timeout:10000,enableHighAccurance:true,maximumAge:3600}在我的项目中运行良好。是的,只有当我们第一次单击“添加”图标时,它才会运行。第二次单击时,positionError被抛出到我的项目中。我也遇到了同样的问题。我第一次开发代码时没有应用选项,但它在第一次也不起作用,所以我添加了选项。所以当我第一次点击这个图标时,它给了我很长的时间。我也通过了这个链接,但是没有一个解决方案对我有效。是我需要重置地理位置参数还是什么来再次获取lat long?谢谢。嘿,菲利普,非常感谢你的回复,我已经在我的应用程序中尝试了你的代码。现在它不会抛出超时错误,但当我第二次单击按钮时,纬度和经度值为0。我注意到,有时它会在开始时给出奇怪的值,尤其是。我不知道那是怎么回事。我想你也可以过滤掉异常值。