【问题标题】:Enter zipcode and display users within a certain radius输入邮政编码,显示一定半径内的用户
【发布时间】:2017-06-22 10:51:31
【问题描述】:

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

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

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

有人可以向我提供如何做到这一点的示例代码,我猜是使用 Google API 或类似的东西吗?我对 JavaScript 很陌生,所以非常感谢一个完整的例子。希望使用 Meteor.Publish 和 Meteor.Subscribe,包括数据的显示。

提前谢谢你!

【问题讨论】:

  • 我建议从MongoDB开始geospatial indexes
  • 谢谢。非常感谢您提供如何轻松实现此功能的代码示例。谢谢!

标签: meteor geolocation zipcode


【解决方案1】:

首先您必须将邮政编码转换为坐标,有一个zipcodes lib - 仅适用于美国和加拿大,如果您的目标是其他地区/国家/地区库,可以在 NPM 上轻松找到。

例如,我们有一个流星方法,它接受带有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
    }
  }
});

进一步阅读:

【讨论】:

  • 这看起来不错!我一有时间就会检查出来。谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多