gpt4 book ai didi

javascript - meteor JS : Display Posts with locations within x miles of current location

转载 作者:行者123 更新时间:2023-12-03 09:01:09 24 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序将显示距其位置一定距离内的人员的帖子。

每当创建帖子时,都会创建一个位置值,该值存储为:{“lat”:39.7230949,“lng”:-104.83521619999999}。发布帖子时当前位置的纬度和经度。

这是来自函数 Geolocation.latLng();,该函数使用当前设备的纬度和经度打印出对象。

我现在正在尝试弄清楚如何让页面列出所有帖子,仅显示位于设备当前位置半径范围内的帖子。

这是我当前的函数,其中列出了我的数据库中的所有帖子。

Template.yakResults.searchResults = function () {
var keyword = Session.get("search-query");
var query = new RegExp( keyword, 'i' );
var results = Yaks.find( { $or: [{'yak': query}] }, {sort: {score: -1}});
return {results: results};
}

我需要做什么才能获得设备当前经/纬度的 10 英里半径的结果,这可以通过上述函数找到。

我想当我在 Yaks 集合中查找帖子时,我使用了某种 if 语句或者可能是文件管理器?

有人知道如何过滤帖子集合以执行类似的操作吗?

如果我需要发布更多代码以便更容易理解我的问题,请告诉我,我会的。

最佳答案

想通了。对于任何将来可能尝试做类似事情的人,这就是我所做的。

首先,我将帖子位置格式化为 geoJSON,然后才能进入数据库。这是我用来实现此目的的代码。(注意:Gelocation.latLng();函数来自此 meteor 插件( https://atmospherejs.com/mdg/geolocation ))。

这是提交牦牛时调用的代码。

Template.yaksSubmit.events({
'submit .yaksSubmitForm': function(event) {

event.preventDefault();
var yak = event.target.yak.value; //get yak input value
var yakLocation = Geolocation.latLng(); // location of yak

var lat = yakLocation.lat;

var lng = yakLocation.lng;

//check if the value is empty
if(yak == "") {
alert("You can't inert a empty yak!");
} else {
Meteor.call('yakInsert', yak, lng, lat);
Router.go('yaksList');
}
}
});

这是从我的 server.js 文件中调用的 yakInster 方法。

yakInsert: function(yak, lng, lat) {
var postId = Yaks.insert({
yak: yak,
loc : {
type: "Point",
coordinates: [ lng, lat ]
},
score: 0,
submitted: new Date(),
user: Meteor.userId(),
lng: lng,
lat: lat
// Geolocation.latLng(); JSON.stringify(yakLocation)
});
}

然后我与助手将设备的经度/纬度存储到 session 中。

Template.yakResults.helpers({
lat: function() {
var currentLocation = Geolocation.latLng(); // location of yak
var lat = currentLocation.lat;
Session.set("device-lat", lat);
},
lng: function() {
var currentLocation = Geolocation.latLng(); // location of yak
var lng = currentLocation.lng;
Session.set("device-lng", lng);
}
});

然后,为了让我的函数显示我的所有帖子,我使用了 mongolab ( http://blog.mongolab.com/2014/08/a-primer-on-geospatial-data-and-mongodb/ ) 上这篇博文中解释的信息。该函数如下所示

Template.yakResults.searchResults = function () {
var lng = Session.get("device-lng");
var lat = Session.get("device-lat");
var query = new RegExp( keyword, 'i' );
var results = Yaks.find( {
loc:
{ $near :
{
$geometry:{ type:"Point", coordinates:[ lng, lat]},
$minDistance: 0,
$maxDistance: 5000
}
}
});
return {results: results};
}

这使得帖子显示的顺序由每头牦牛/帖子相对于设备位置的位置决定。

$minDistance 和 $maxDistance 的单位为米。

这可能不是让它发挥作用的最佳方式,但它对我有用。只是想我会分享它,以防其他人可以使用它。

关于javascript - meteor JS : Display Posts with locations within x miles of current location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32300412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com