2017-06-22 56 views
1

內郵政編碼和顯示用戶我有一個流星的應用,其中產品供應商註冊時輸入自己的郵政編碼。 該數據存儲在users.profile.zipcode中。輸入特定半徑

流量: 1.任何人訪問的網站可以在搜索欄中輸入一個郵政編碼。 2.顯示郵政編碼在10公里內的郵編的產品供應商列表。

該應用程序將是挪威的用戶與開始,但將可能擴大到不同國家的未來。

可有人爲我提供瞭如何可以做到這一點,我想使用谷歌API或類似的東西示例代碼?我對JavaScript非常陌生,因此非常感謝一個完整的示例。希望使用Meteor.Publish和Meteor.Subscribe,包括顯示數據。

預先感謝您!

+0

我建議先從MongoDB的[地理空間索引(https://docs.mongodb.com/manual/applications/geospatial-indexes/) –

+0

謝謝您。非常感謝這個如何輕鬆實現的代碼示例。謝謝! – user3323307

回答

0

首先,您將不得不將郵政編碼轉換爲座標,但有一個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 
    } 
    } 
}); 

進一步閱讀:

+1

這看起來不錯!我會盡快檢查出來。謝謝! – user3323307