2015-11-23 35 views
5

Bu sorguyu MongoDB'de başlattığımda, 500 km civarındaki tüm yerleri belirtilen koordinatlara alıyorum. Fakat belirtilen koordinatlar ile sonuç konumu arasındaki kesin mesafeyi bilmek istiyorum. Ben de belirtilen koordine gelen bu yerin mesafesini bilmek istiyorumMongoDB iki nokta arasındaki baskı mesafesi

{ 
    "_id" : ObjectId("565172058bc200b0db0f75b1"), 
    "type" : "Feature", 
    "geometry" : { 
     "type" : "Point", 
     "coordinates" : [ 
      -80.148826, 
      25.941116 
     ] 
    }, 
    "properties" : { 
     "Name" : "Anthony's Coal Fired Pizza", 
     "Address" : "17901 Biscayne Blvd, Aventura, FL" 
    } 
} 

: gibi

db.new_stores.find({ "geometry": { $nearSphere: { $geometry: { type: "Point", coordinates: [ -81.093699, 32.074673 ] }, $maxDistance: 500 * 3963 } } }).pretty() 

My Çıktı görünüyor. Geometri üzerinde 2dsphere indeksi oluşturdum.

cevap

9
Sen sorgulanan noktadan mesafe üretmek için $geoNear agrega boru hattı aşamasını kullanabilirsiniz

: Bu veriyor

db.new_stores.aggregate([ 
    { "$geoNear": { 
     "near": { 
      "type": "Point", 
      "coordinates": [ -81.093699, 32.074673 ] 
     }, 
     "maxDistance": 500 * 1609, 
     "spherical": true, 
     "distanceField": "distance", 
     "distanceMultiplier": 0.000621371 
    }} 
]).pretty() 

sen mesafeyi içeren çıkış belgelerinde başka bir alana üretecek "distanceField" belirtmek için sorgulanan nokta. Tabii yapar ait Ayrıca bunu (mil yani metre ve tüm GeoJSON mesafeleri metre döndürülür noting o) gereklidir

da benzer seçeneklerle geoNear komutu yoktur olarak çıktı mesafeye dönüşüm applyany için "distanceMultiplier" kullanabilirsiniz ancak imleci çıktı olarak döndürmez.

+0

Çok teşekkürler, mükemmel çalışıyor. Neden 1609 ile çarptığını bilmek merak ediyor musun? – SiMemon

+1

@SiMemon Bir mil 1609 metre ve distanceMultiplier üzerinde tersi/tersi olduğundan. Kullandığınız 3963 sayısı, "radyan" dönüşümünün, GeoJSON nokta koordinatları ile kullanıldığında yanlış olduğu mil yönüne dönüştürülmesidir. Radyanlar yalnızca hem depolamada hem de sorguda kullanılır ve "eski koordinat çiftleri" kullanılır. –

İlgili konular