获取地理位置数据以存储在 ionic 2 应用程序中

Posted

技术标签:

【中文标题】获取地理位置数据以存储在 ionic 2 应用程序中【英文标题】:Fetching Geolocation data to store in ionic 2 application 【发布时间】:2017-05-15 19:05:14 【问题描述】:

我正在尝试将地理位置数据导入coords 以存储在我的 ionic 应用程序中的 DynamoDB 中,如果我按照以下代码操作,我会不断收到错误,

bookResource(resourceId, timeslot): Promise<void> 
let promise: Promise<void> = new Promise<void>((resolve, reject) => 
  this.globals.displayLoader("Place...");

  let place : Place = 
    coords: google.maps.LatLng(position.coords.latitude, position.coords.longitude),
    userId: this.globals.getUserId(),
    userFirstName: this.globals.getUserFirstName(),
    userLastName: this.globals.getUserLastName(),
  ;
  this.authClient.getClient().placesCreate(this.globals.getUserId(), place).subscribe(
    (data) => 
      place.placeId = data.placeId;
      this.places.push(place);
      resolve();
    ,
    (err) => 
      reject(err);
    
  );
);
return promise;

上面代码中的coords 值没有存储地理位置坐标,而我的userId 值存储正确,我该如何解决这个问题。谢谢

【问题讨论】:

您是否要获取设备的当前位置? @raj 是的,我正在尝试获取设备的当前位置 【参考方案1】:

ionic 中的本机功能通常返回 PromiseObservable,您只能在 success 回调中访问它们。因此,如果您尝试保存设备的位置,您可以使用 ionic 的 GeoLocation 插件。查看docs

import  Geolocation  from 'ionic-native';
  getLocation()
    let options =  maximumAge: 3000, timeout: 50000, enableHighAccuracy: true ;
    return Geolocation.getCurrentPosition(options).then((pos)=>
    let place : Place = 
      coords: pos.coords,
      userId: this.globals.getUserId(),
      userFirstName: this.globals.getUserFirstName(),
      userLastName: this.globals.getUserLastName(),
    ;
    return place;
    ).catch( (err) => 
      console.log(err);
    );
  

然后你可以访问位置像

this.getLocation().then((place)=>
  console.log(place) // you can do whatever you want with ``place`` here
     this.authClient.getClient().placesCreate(this.globals.getUserId(), place).subscribe(
    (data) => 
      place.placeId = data.placeId;
      this.places.push(place);
    ,
    (err) => 
    
  );
)

【讨论】:

我已经更新了返回承诺的代码,您能否修改我在您的问题中的代码,我相信您的答案会起作用,谢谢 我已经用我认为对你有用的解决方案更新了我的答案。如果有帮助,请接受它作为答案。【参考方案2】:

运行 ngOnInit 创建一个函数,获取 latlong 值并将其值存储在数据库中

ngOnInit() 
  this.map = this.initMap();
  setInterval(() => 
    this.initMap();
  );

下面是要运行的函数OnInit,它会返回一个promise。

initMap(): Promise<void> 
    let promise: Promise<void> = new Promise<void>((resolve, reject) => 
      Geolocation.getCurrentPosition().then((position) => 

        let latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
        let place: Place = 
          coords: latLng,
          userId: this.globals.getUserId(),
          userFirstName: this.globals.getUserFirstName(),
          userLastName: this.globals.getUserLastName(),
        ;
        let GooleMap = new google.maps.Map(document.getElementById('map'), 
          center: latLng,
          zoom: 18
        );
          this.authClient.getClient().placesCreate(this.globals.getUserId(), place).subscribe(
            (data) => 
              place.placeId = data.placeId;
              this.places.push(place);
              resolve();
            ,
            (err) => 
              reject(err);
            );
      );
    );
    return promise;
  

【讨论】:

以上是关于获取地理位置数据以存储在 ionic 2 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章

从 Ionic Storage 设置/获取对象和值

无法在 Ionic 框架上使用人行横道获取地理位置(未发现错误)

Ionic & ngCorgova 地理定位

在后台获取 Ionic/Cordova 应用程序的位置

ionic2 - 用户订阅 OneSignal 后如何获取玩家 ID

从 InAppBrowser IONIC 5 获取 JSON 数据