2

在云功能中访问 Firestore 文档时出现以下错误

“错误:位置无效:GeoPoint 上必须存在纬度”

我在 firebase 日志中看到以下错误

错误:无效位置:在 validateLocation (/srv/node_modules/geofirestore/dist/index.cjs.js:567:15) 处的地理点上必须存在纬度,在 calculateDistance (/srv/node_modules/geofirestore/dist/index.cjs.js: 120:5) at /srv/node_modules/geofirestore/dist/index.cjs.js:1148:32 at Array.forEach () at /srv/node_modules/geofirestore/dist/index.cjs.js:1147:27 at Array .forEach () at new GeoJoinerGet (/srv/node_modules/geofirestore/dist/index.cjs.js:1146:19) at /srv/node_modules/geofirestore/dist/index.cjs.js:1432:72 at at at process。 _tickDomainCallback (内部/进程/next_tick.js:229:7)

我的 index.ts 文件

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';import * as geofire from 'geofirestore';

admin.initializeApp();

const db = admin.firestore();

const geofirestore = new geofire.GeoFirestore(db);
const geocollection = geofirestore.collection('posts');

export const sendPostToDevice = functions.firestore
.document('posts/{postId}')
.onCreate((snapshot, context) => {
const post = snapshot.get('content');

    const l = snapshot.get('l');

    const GeoPoint = admin.firestore.GeoPoint;

    const gp = new GeoPoint(37.4219983, -122.084);
    const query = geocollection.near({
        center: gp,
        radius: 1000
    });
    query.get().then((value) => {
        console.log(value);
    }).catch((err) => console.log(err));
    return null;
})

附加信息:在创建 GeoFirestore 所需的 Post 文档时,我在我的颤振应用程序中使用 GeoFlutterFire 并存储附加字段(g:geohash 和 l:location 存储为地理点)。我怀疑错误是因为我存储字段“g”和“l”的方式。

我在 Cloud Functions 中使用 GeoFirestore 来查询附近的用户,检索他们的 FCM 令牌并将它们提供给 Firebase Messaging 以发送通知。

我需要以某种方式存储字段 g 和 l 吗?我们可以只使用 GeoFlutterFire 来达到我的目的吗?

谢谢您的帮助!

我的火堆里的田野。

4

1 回答 1

1

new GeoPoint(37.4219983, -122.084) 看起来还可以,所以我怀疑它一定是您的地理收集对象的地理位置之一造成了麻烦。

于 2020-04-05T01:19:25.423 回答