2016-06-07 22 views
5

Używanie MongoDB 3.2 Próbuję użyć zapytań 2dsphere w zbiorze Punktów.

Powiedzmy mam kolekcja cust_5_abcd z indeksem 2dsphere na the_geom pola.

Dodaj geometrię w kolekcji:

db.cust_5_abcd.insert({ 
"chps0" : "Texte d'une ligne", 
"the_geom" : { 
    "type" : "Point", 
    "coordinates" : [ 
     1.032715, 
     40.380028 
    ] 
}}) 

Teraz próbuję kwerendy tego punktu za pomocą $ geoWithin aby wszystkie dane wewnątrz określonego wielokąta. Tutaj uzyskuję inny wynik, jeśli używam $ geometry z definicją GeoJSON lub z $ polygon i ścisłymi współrzędnymi. Może brakuje czegoś w dokumentacji lub czegoś, co źle zrozumiałem.

Z $ geometrii daje żadnego rezultatu:

db.cust_5_abcd.find( { the_geom: 
{ $geoWithin: 
     { $geometry: 
      {  
       "type": "Polygon", 
       "coordinates": [ 
        [ 
         [ -16.237793, 40.162083 ], 
         [ -16.237793, 51.835778 ], 
         [ -13.776855, 51.835778 ], 
         [ -13.776855, 41.426253 ], 
         [ 14.765625, 41.426253 ], 
         [ 14.765625, 40.162083 ], 
         [ -16.237793, 40.162083 ] 
       ] 
       ] 
      } 
     } 
    } 
}) 

Z $ wielokąt zwraca moją Point:

db.cust_5_abcd.find({ the_geom: 
{ $geoWithin: 
     { $polygon: 
        [ 
         [ -16.237793, 40.162083 ], 
         [ -16.237793, 51.835778 ], 
         [ -13.776855, 51.835778 ], 
         [ -13.776855, 41.426253 ], 
         [ 14.765625, 41.426253 ], 
         [ 14.765625, 40.162083 ], 
         [ -16.237793, 40.162083 ] 
       ]     
     } 
    } 
}) 
+0

To jest trochę dziwne ..., zwłaszcza że query.explain ("executionStats") pokazuje, że pierwsze zapytanie używa indeksu (jeśli zostało utworzone), a drugie nie ... – profesor79

Odpowiedz

0

dostałem odpowiedź od ludzi MongoDB: https://jira.mongodb.org/browse/SERVER-24549?focusedCommentId=1293398&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-1293398

Podczas korzystania z $ wielobok oblicza geometrię planarną, a punkt wpada do opisywanego wielokąta. Jednak podczas korzystania GeoJSON geometria sferyczna jest używany, a temperatura mieści się w geometrii

Teraz problemem jest to, że nie mogę użyć $ wielokąt na $ geoIntersect dla exemple lub z inną geometrią następnie wielokąta.