首先,我在localhost上使用Parse Server,而我的客户端是Parse Android SDK。
我有一个名为“位置”的GeoPoint字段“Place”。这个类有50行,所有这些行都有“location”,如: -22.xxxxxx | -42.xxxxxx
当我尝试查询所有行时,如果没有Geopoint
过滤器,我会获得所有50个。但是当我添加过滤器query.whereWithinKilometers
或query.whereNear
时,我得到一个空{{1变种
objects
日志“LOG 1”和“LOG 2”显示我的正确坐标,因此 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());
}
}
});
Geopoint是正确的。
“LOG 3”未显示,因为“objects.toString()”抛出NullPointerException。
结论:
完全相同的代码,没有gp
。 de callback只需不到1秒钟。
使用query.whereWithinKilometers
,回调需要5到10秒,然后返回空对象。我已经尝试了15,150,1500,15000公里,没有任何回报。那个班级的所有地方都在我的城市,所以,10公里就可以了。
我想不出其他任何事情要检查。
答案 0 :(得分:0)
我找到了解决方案。地缘点查询需要一个特定的&#34; 2dsphere&#34; MongoDB索引工作。
解决方案是在MongoDB脚本shell上执行以下代码:
db.Place.ensureIndex({ location: "2dsphere" });
Where&#34; Place&#34;是班级/集合和&#34;位置&#34;是geopoint字段。