2013-11-23 16 views
5

Inserisco molti poligoni in MongoDB (2.4.8), e spero di trovare il poligono in cui si trova un Punto specificato. Sembra una domanda comune. Ma dopo aver letto tutti i documenti di google, non ho ottenuto il risultato. Quindi crea questa domanda.MongoDB Come trovare quale poligono contiene un punto specificato?

ad es.

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 ] ] ] 
} }) 

Ora come trovare il poligono che contiene Punto (1,1)?

Chiunque può aiutarmi? Molte grazie!

risposta

13

Utilizzare $geoIntersects operator. Esegue una query su tutte le forme che intersecano l'oggetto GeoJSON passato. Quando passi un punto ad esso, dovrebbe restituire tutte le forme che includono quel punto. Tieni presente che l'operatore $ geoIntersects funziona solo per gli indici 2sphere, non per gli indici 2d.

+0

Funziona! Mi dispiace, ho appena provato $ geoWithin. Philipp, grazie mille! – fanzhou

+0

@fanzhou Quando questa risposta è stata corretta, contrassegnarla come tale facendo clic sull'icona a forma di spunta accanto ad essa. – Philipp

+0

@Philipp puoi spiegare di più sulla query? ho bisogno di un esempio per questa query :) – Emech

2

Come ha detto @philipp, è necessario utilizzare l'operatore $ geoIntesects. Stavo avendo il tempo più difficile cercando di capire la query. Ho pensato di condividere quello che sembra e potrebbe salvare qualcuno nei guai più tardi.

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

Potresti per favore fare un esempio su come farlo usando Mongo Java Driver? o MongoTemplate. Grazie. –

+0

Non ho familiarità con la sintassi per entrambi. Scusate. –

Problemi correlati