解析 query.whereNear 和 query.whereWithinKilometers 两个 return 空对象列表
Parse query.whereNear and query.whereWithinKilometers both return empty object list
首先,我在本地主机上使用 Parse Server,我的客户端是 Parse Android SDK。
我有一个 class "Place",其中包含名为 "location" 的 GeoPoint 字段。此 class 有 50 行,所有行都带有 "location",例如:
-22.xxxxxx | -42.xxxxxx
当我尝试查询所有行时,没有 Geopoint
过滤器,我得到了所有 50。但是当我添加过滤器 query.whereWithinKilometers
或 query.whereNear
时,我得到一个空的 objects
变量
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" 显示了我的正确坐标,因此 gp
地理点是正确的。
未显示 "LOG 3",因为 "objects.toString()" 抛出 NullPointerException。
结论:
完全相同的代码,没有 query.whereWithinKilometers
可以完美运行。而且de回调不到1秒。
使用query.whereWithinKilometers
,回调需要5到10秒,然后returns空对象。我已经尝试了 15、150、1500、15000 公里,但没有任何回报。 class 中的所有地方都在我所在的城市,因此,10 公里就可以了。
我想不出还有什么要检查的。
我找到了解决办法。地理点查询需要 MongoDB 上的特定“2dsphere”索引才能工作。
解决方法是在MongoDB脚本shell上执行以下代码:
db.Place.ensureIndex({ location: "2dsphere" });
其中 "Place" 是 class/collection,"location" 是地理点字段。
首先,我在本地主机上使用 Parse Server,我的客户端是 Parse Android SDK。
我有一个 class "Place",其中包含名为 "location" 的 GeoPoint 字段。此 class 有 50 行,所有行都带有 "location",例如: -22.xxxxxx | -42.xxxxxx
当我尝试查询所有行时,没有 Geopoint
过滤器,我得到了所有 50。但是当我添加过滤器 query.whereWithinKilometers
或 query.whereNear
时,我得到一个空的 objects
变量
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" 显示了我的正确坐标,因此 gp
地理点是正确的。
未显示 "LOG 3",因为 "objects.toString()" 抛出 NullPointerException。
结论:
完全相同的代码,没有 query.whereWithinKilometers
可以完美运行。而且de回调不到1秒。
使用query.whereWithinKilometers
,回调需要5到10秒,然后returns空对象。我已经尝试了 15、150、1500、15000 公里,但没有任何回报。 class 中的所有地方都在我所在的城市,因此,10 公里就可以了。
我想不出还有什么要检查的。
我找到了解决办法。地理点查询需要 MongoDB 上的特定“2dsphere”索引才能工作。
解决方法是在MongoDB脚本shell上执行以下代码:
db.Place.ensureIndex({ location: "2dsphere" });
其中 "Place" 是 class/collection,"location" 是地理点字段。