我真的不明白。我在我的iPhone上运行的Meteor(v1.3.3,MongoDb v2.6.7)应用程序中有以下代码,但它并不总是有效。有时会这样做,有时则不会:
Places = new Mongo.Collection("places");
if(Meteor.isServer) {
Places._ensureIndex({'loc':'2dsphere', name: 1});
}
if(Meteor.isClient) {
var maxDistance = 50;
...
latLng = Geolocation.latLng();
if (! latLng)
{
console.warn('Could not get location!');
return;
}
console.log('location: ' + latLng.lat + ' (' + typeof latLng.lat + '), ' + latLng.lng + ' (' + typeof latLng.lng + ')');
var placeNearby = Places.findOne({
loc: {
$near: {
$geometry: {
type: "Point",
coordinates: [latLng.lng, latLng.lat]
},
$maxDistance: maxDistance //meters
}
}
});
...
}
在我获取placeNearby之后,我做了一个console.log(' placeNearby',placeNearby)。有时它确实找到了一个地方,有些时候却找不到。
我在iPhone 5s(iOS 9)上运行此功能,但Xcode:
meteor run ios-device --mobile-server http://10.0.1.10:3000
我测试时总是在同一个地方。我认为这可能是因为GPS坐标不精确,所以我将maxDistance增加到50000,但它没有改变任何东西。有趣的是,我的console.log没有为placeNearby输出undefined。它似乎输出一个空字符串。
但是,如果我在MongoDb终端中输入以下查询,它会检索一些结果:
db.places.find({
loc: {
$near: {
$geometry: {
type: "Point",
coordinates: [-73.56737205923496, 45.50178023952462]
},
$maxDistance: 50 //meters
}
}
})
答案 0 :(得分:0)
这是一个愚蠢的错误。我忘记了我在iPhone上关闭了wifi,因此无法与本地服务器通信。话虽这么说,我不会想到与服务器的连接是必要的。我认为所有数据都被复制到客户端的minimongo数据库中,并且应用程序可以独立运行。
我现在想知道是否有办法发布一个可以在设备上本地运行的Meteor应用程序。我读了一些关于GroudDB的内容,但是无法使用$附近的GroundDB找到任何关于几何查询的文档。