2016-06-17 7 views
1

mongoDBに格納されている5mポイントをクラスタリングしようとしています。 1つのクエリの最大結果は現在約1メートルなので、最初のビジュアルにはPruneClusterを使用することに決めました。ポイントはgeoJSONオブジェクトとして格納され、2dsphereインデックスがあります。Node.js mongodbからgeojsonをフロントエンドで使用できるオブジェクトに渡す方法

私はプレビュー版で収集し、ルート結果から、LOCフィールドを返すよう、ポリゴン内のポイントを見つけるために、ネイティブのNode.jsドライバおよびクエリを使用するMongoDBに接続:

router.get('/map', function(resq,res) { 
    var MongoClient = mongodb.MongoClient; 
    var url = 'mongodb://localhost:27017/airboost'; 

    MongoClient.connect(url, function(err, db) { 
    if(err){ 
     console.log('Unable to connect to db ', err); 
    } else { 
     console.log('Connected!!!'); 

     var collection = db.collection('listingsF'); 

     collection.find({ 
      loc: { 
      $geoWithin: { 
       $geometry: { 
        type : "Polygon" , 
         coordinates: [[[121.48521363894814,31.41360430073249],[...],[121.48865692654915,31.41168940543709]]] 
          } 
          } 
       } 
      },{loc:1}).toArray(function(err, result){ 

      if (err) { 
      res.send(err); 
      } else if (result.length) { 
      res.send(result); 
      } else { 
      res.send('Nothing found'); 
      } 
      db.close(); 
     }); 
     } 
    }); 
}); 

私はのリストを取得

[ 
    { 
    "_id": "567f972bad55ac0797baa75b", 
    "loc": { 
     "type": "Point", 
     "coordinates": [ 
     -85.84556526181, 
     10.29620625503 
     ] 
    } 
    }, 
    { 
    "_id": "567f972bad55ac0797baa75c", 
    "loc": { 
     "type": "Point", 
     "coordinates": [ 
     -54.943878777465, 
     -34.964002797642 
     ] 
    } 
    } 
] 

その後、私は、パブリックフォルダ/からスクリプトで機能するように何とかその結果を渡す必要がある、だから私はリーフレットマップ上のクラスタを表示することができます:

このようなオブジェクト

jadeを使ってコンテンツを印刷することはできますが、mongodbのすべてのデータをマーカーとしてPruneClusterに渡す方法はわかりません。私は方向にちょうどポイントを完全なコードが必要はありません。誰か助けてくれますか?

答えて

1

あなたが簡単に渡されたオブジェクトのヒスイで変数を作成することができます。

// server.js 
res.render('something', { 
    something: mogoDBObject 
}); 

// Your template.jade 
script. 
    var myGeoJSONArray = !{something}; 
    // If you're getting problems parsing the array of objects 
    // i.e. "something" becomes something like [[object Object], ...] 
    // use myGeoJSONArray = JSON.parse('!{JSON.stringify(something)}'); 
script(src='path/to/public/folder/main.js') 

// path/to/public/folder/main.js 
/* Do Something with your variable myGeoJSON */ 
myGeoJSONArray.forEach(geoJSON=>{ 
    var marker = new PruneCluster.Marker(...geoJSON.loc.coordinates.reverse()); 
    marker.push(marker); 
    ... 
}); 
+0

は、あなたの答えをありがとう!あなたは私が緯度をどのように取るのか、dbから得るgeojsonからlngを取るのか、という方向を教えてくれますか? – toHo

+0

うわーありがとう!あなたが望むなら、結果を共有するコードになっています。 – toHo

+0

あなたはウェルカムです!構造化のためのspred演算子 "..."の使用に興味がある場合は、こちらをご覧ください:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator –

関連する問題