座標検索っていうのかな…
位置情報検索…?なんていうのこういうの
とりあえず2点の数値を座標として扱って、
近い順にデータを取り出す方法を以下に備忘録的に
テスト用データ
コレクション[search]内のデータ例
{
"_id":"16188bfdf093f",
"loc":[139.000000000,35.000000000]
}
コード
app.js
//利用するコントローラを読み込みます
var search = require('./routes/search ');
app.use('/search', search );
search.js
var mongodb = require('mongodb');
var data_collection;
//mongoDBに接続
//そしてカラム「loc」を2次元座標として設定する
mongodb.MongoClient.connect("mongodb://localhost:27017/test", function(err, database) {
if(err){}
data_collection= database.collection("data_collection");
data_collection.ensureIndex({loc: "2dsphere"}, {}, function(err, result) {if(err){}console.log(result)});
});
router.get("/", function(req, res) {
//リクエスト内の座標情報を取得
var lat = req.query.lat;
var lng = req.query.lng;
var searchObject = {
"loc" : {
$nearSphere : [parseFloat(lng) ,parseFloat(lat)]
}
};
// 座標から近い順に50件を取得
// 非同期コールバック処理なので注意。
// コレクションから値を取得する。
data_collection.find(searchObject).limit(50).toArray(function(err, items) {
if(err){console.log(err)}
res.send({"items":items});
});//find
});//router
↓こいつの描き方がよくわからなくて詰んでた…
parseFloatを忘れてただけでした。恥ずかしい。
var searchObject = {
"loc" : {
$nearSphere : [parseFloat(lng) ,parseFloat(lat)]
}
};