我有一个Meteor应用程序,产品提供商在注册时输入他们的邮政编码。 此数据存储在users.profile.zipcode中。
流速: 1.访问该网站的任何人都可以在搜索字段中输入邮政编码。 2.显示邮政编码在该邮政编码10公里范围内的产品提供商列表。
该应用程序将面向挪威用户开始,但将来可能会扩展到不同的国家/地区。
有人可以向我提供如何完成此操作的示例代码,我想使用Google API或类似的东西?我是JavaScript的新手,所以非常感谢一个完整的例子。希望使用Meteor.Publish和Meteor.Subscribe,包括显示数据。
提前谢谢!
答案 0 :(得分:0)
首先,您必须将邮政编码转换为坐标,只有zipcodes lib - 仅适用于美国和加拿大,如果您的目标是其他地区/国家/地区,则可以在NPM上轻松找到。
例如,我们有一个Meteor方法,它接受带有zipcode
字段的表单:
import zipcodes from 'zipcodes';
// Create `2dsphere` index
const collection = new Mongo.Collection('someCollectionName');
collection._ensureIndex({zipLoc: '2dsphere'});
Meteor.Methods({
formSubmit(data) {
const zipData = zipcodes.lookup(data.zipcode);
// Save location as geospatial data:
collection.insert({
zipLoc: {
type: "Point",
coordinates: [zipData.longitude, zipData.latitude]
}
});
}
});
要在半径内搜索,请使用下一个代码:
const searchRadius = 10000; // 10km in meters
const zip = 90210;
const zipData = zipcodes.lookup(zip);
collection.find({
zipLoc: {
$near: {
$geometry: [zipData.longitude, zipData.latitude],
$maxDistance: searchRadius
}
}
});
进一步阅读: