使用MongoDB和express.js进行位置信息(纬度经度)搜索

只需要一种选择:
是坐标搜索吗?
是位置信息搜索吗?这种东西怎么说来着
暂时将两个点的数值作为坐标处理,

以下是一种按照接近程度提取数据的备忘录方法。

测试数据

{
  "_id":"16188bfdf093f",
  "loc":[139.000000000,35.000000000]
}

代码 (Mandarin Chinese)

//利用するコントローラを読み込みます
var search = require('./routes/search ');
app.use('/search', search );
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)]
    }
  };
广告
将在 10 秒后关闭
bannerAds