0

首先,我在 localhost 上使用 Parse Server,我的客户端是 Parse Android SDK。

我有一个名为“位置”的 GeoPoint 字段的“地点”类。此类有 50 行,所有行都带有“位置”,例如:-22.xxxxxx | -42.xxxxxx

当我尝试在没有Geopoint过滤器的情况下查询所有行时,我得到了全部 50 个。但是当我添加过滤器时query.whereWithinKilometersquery.whereNear我得到一个空objectsvar。

    ParseQuery<ParseObject> query = ParseQuery.getQuery("Place");
    Log.d("LOG 1", String.valueOf(gp.getLatitude()));
    Log.d("LOG 2", String.valueOf(gp.getLongitude()));
    query.whereWithinKilometers("location", gp, 150);
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException e) {
            Log.d("LOG 3", objects.toString());
            if (e == null) {
                if (objects.size() > 0) {
                    for (int i = 0; i < objects.size(); i++) {
                        //do something here...
                    }                       
                }
            } else {
                Log.d("Query error", e.getMessage());
            }
        }
    });

日志“LOG 1”和“LOG 2”显示了我的正确坐标,所以gpGeopoint 是正确的。

未显示“LOG 3”,因为“objects.toString()”抛出 NullPointerException。

结论:

完全相同的代码,没有query.whereWithinKilometers完美的作品。并且 de 回调需要不到 1 秒的时间。

使用query.whereWithinKilometers,回调需要 5 到 10 秒,然后返回空对象。我已经尝试了 15、150、1500、15000 公里,但没有任何回报。而且那个班级的所有地方都在我的城市,所以,10公里就可以了。

我想不出还有什么要检查的。

4

1 回答 1

0

我找到了解决方案。地理点查询需要 MongoDB 上的特定“2dsphere”索引才能工作。

解决方案是在 MongoDB 脚本 shell 上执行以下代码:

    db.Place.ensureIndex({ location: "2dsphere" });

其中“地点”是类/集合,“位置”是地理点字段。

于 2016-03-11T17:11:01.513 回答