我有一个Meteor应用程序,产品供应商在注册时输入他们的邮政编码。此数据存储在users.profile.zipcode中。
流程: 1.任何访问该网站的人都可以在搜索字段中输入邮政编码。2.显示邮政编码在该邮政编码10公里内的产品提供商列表。
这款应用程序最初将面向挪威用户,但未来可能会扩展到不同的国家。
有没有人能给我提供一些示例代码,告诉我如何使用Google API或类似的工具来实现这一点?我是JavaScript的新手,所以如果能有一个完整的例子我将非常感激。希望使用Meteor.Publish和Meteor.Subscribe,包括数据的显示。
提前谢谢你!
发布于 2017-06-22 13:20:47
首先你需要将邮政编码转换成坐标,这里有一个zipcodes lib --只针对美国和加拿大,如果你的目标是其他地区/国家的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]
}
});
}
});
要在radius内搜索,请使用下一个代码:
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
}
}
});
进一步阅读:
https://stackoverflow.com/questions/44697282
复制