2010-10-07 17 views
16

Konum prodüksiyonunda bir geospacial endeksine sahip bir mağaza koleksiyonum var.MongoDB Bağımlı Sorgular: Milan radyanı nasıl dönüştürebilirim?

Kullanmaya çalıştığım şey, kullanıcının enlemi, enlemi ve bir arama yarıçapı (mi) verildiği zaman, bu parametrelerdeki mağazaların listesini döndürmek istiyorum.

Aşağıdaki örnek MongoDB belgelerinde (http://www.mongodb.org/display/DOCS/Geospatial+Indexing) gördüm, ancak mesafenin radyan cinsinden olduğu anlaşılıyor.

center = [50, 50] 
radius = 10 
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}}) 

Peki, milleri radyanlara dönüştürme formülü nedir? mongodb kullanıcıda

Çözüm müthiş insanlar beni cevap bulmak yardımcı oldu. Temel olarak, gerçekten aradığım şey mesafeyi sınırlamanın bir yoluydu.

Başına güncel belgeleme, sorguya yakın $ 'a bir 3 parametre vardır: Ayrıca maksimum mesafe

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 } }).limit(20) 

$ maxDistance değeri radyan cinsinden olduğu ile yakın $ kullanabilirsiniz; öyleyse, mesafemi mil olarak aldım ve 69'a böldüm.

Teşekkür ederiz! docs gibi

+0

Ben mongdb kullanıcı Google Grubu ile ilgili sorumu yayınlayarak Cevabımı bulabildim (http://groups.google.com/group/mongodb-user/browse_thread/iplik/d37c781bbfff5f08). – Abe

+4

Not: 69'a bölerek, radyan değil, milden * derece *, kaba bir dönüşümdür. Dereceler burada doğru, çünkü bu bir düz ol ''$ near' sorgusu (yani, $ maxDistance'ın koordinatlarla aynı birimlerde olması gerektiği anlamına gelir), küresel bir sorgu değil (* yapmak * $ maxDistance' gerektirir) radyanda olmak). –

cevap

15

ki:

Tüm mesafeler radyan kullanın. Bu, seçtiğiniz birimdeki mesafeyi elde etmek için dünyanın yarıçapı (yaklaşık 6371 km veya 3959 mil) ile kolayca çarpmanızı sağlar. Tersine, sorgu yaparken dünyanın yarıçapına bölün.

böylece yarıçapınızı dünya çapına göre bölmeniz yeterlidir. sizin örnekte olurdu:

radius = 10/3959
+0

Üzgünüm, sanırım bu kadar değil. Sonuç alamıyorum ve SQL Server'da eşdeğeri çalıştırdığımda sonuçları alırım – Abe

+0

MongoDb'nin hangi sürümünü kullanıyorsunuz? – walla

+0

Windows 64 bit – Abe