输入zipcode并显示特定半径范围内的用户

时间:2017-06-22 10:51:31

标签: meteor geolocation zipcode

我有一个Meteor应用程序,产品提供商在注册时输入他们的邮政编码。 此数据存储在users.profile.zipcode中。

流速: 1.访问该网站的任何人都可以在搜索字段中输入邮政编码。 2.显示邮政编码在该邮政编码10公里范围内的产品提供商列表。

该应用程序将面向挪威用户开始,但将来可能会扩展到不同的国家/地区。

有人可以向我提供如何完成此操作的示例代码,我想使用Google API或类似的东西?我是JavaScript的新手,所以非常感谢一个完整的例子。希望使用Meteor.Publish和Meteor.Subscribe,包括显示数据。

提前谢谢!

1 个答案:

答案 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
    }
  }
});

进一步阅读: