2013-11-23 654 views
5

MongoDB'ye (2.4.8) birçok çokgen ekliyorum ve belirtilen noktaya yerleştirilen çokgeni bulmayı umuyorum. Ortak bir soru gibi görünüyor. Ancak tüm dokümanları google'dan okuduktan sonra sonucu almadım. Yani bu soruyu yaratın.MongoDB Hangi poligonun belirli bir Nokta içerdiğini nasıl bulabilirsiniz?

örn.

db.addr_poly.insert(
{ loc : 
    { type : "Polygon" , 
    coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ] 
} }) 
db.addr_poly.insert(
{ loc : 
    { type : "Polygon" , 
    coordinates : [ [ [ 0 , 0 ] , [ -3 , -6 ] , [ -6 , -1 ] , [ 0 , 0 ] ] ] 
} }) 

Şimdi Nokta (1,1) içeren çokgeni nasıl bulabilirim?

Herkes bana yardım edebilir mi? Çok teşekkürler!

cevap

13

$geoIntersects operator'u kullanın. Geçtiğiniz GeoJSON nesnesini kesişen tüm şekiller için sorgular. Bir noktaya geçtiğinizde, o noktayı içeren tüm şekilleri döndürmelidir. $ GeoIntersects operatörünün 2d endeksleri için değil sadece 2dsphere dizinleri için çalıştığını unutmayın.

+0

Çalışıyor! Üzgünüm, sadece geoWithin'i denedim. Philipp, çok teşekkürler! – fanzhou

+0

@fanzhou Bu yanıt doğru olduğunda, lütfen yanındaki onay işaretini tıklayarak işaretleyin. – Philipp

+0

@Philipp sorgu hakkında daha fazla bilgi verebilir misiniz? Bu sorgu için bir örneğe ihtiyacım var :) – Emech

2

@philipp'in belirttiği gibi, $ geoIntesects operatörünü kullanmalısınız. Sorguyu anlamaya çalışırken en zor zamanları geçiriyordum. Gördüğüm şeyleri paylaşacağımı düşündüm ve birileri daha sonra dertlerini kurtarabilir.

db.addr_poly.find({ 
    loc:{ 
     $geoIntersects: { 
      $geometry: { 
       type: "Point" , 
       coordinates: [1, 1] 
      } 
     } 
    } 
}); 
+0

Mongo Java Driver'ı kullanarak bunu nasıl yapacağınıza bir örnek verebilir misiniz? veya MongoTemplate. Teşekkürler. –

+0

Ben de için sözdizimi aşina değilim. Afedersiniz. –