2016-07-15 12 views
0

Ich habe ein Dokument, das einen LineString enthält. Ist es möglich, den nächsten Punkt innerhalb des LineStrings basierend auf einem Koordinatenpaar zu finden und zurückzugeben?

db.paths.find( 
    { 
    loc : { 
     $near : { 
     $geometry : { 
      type : "Point" , 
      coordinates : [-73.965355,40.782865] 
     }, 
     $maxDistance : 20000 
     } 
    } 
); 



// My "path" document 

loc:{ 
    "type": "LineString", 
    "coordinates": [ 
    [-2.551082,48.5955632], 
    [-2.551229,48.594312], 
    [-2.551550,48.593312], 
    [-2.552400,48.592312], 
    [-2.553677, 48.590898] 
    ] 
} 

Antwort

1

Ab MongoDB v2.4 (Zur Zeit v3.2), LineString ist einer der unterstützten GeoJSON Objekte. Siehe GeoSpatial: GeoJSON Objects

Sobald Sie 2dsphere index im Feld loc erstellen, können Sie die nächsten Punkte abfragen.

Ihr Beispieldokument verwenden, ein Mongo Shell Abfrage wäre:

db.paths.find({ 
       location:{ 
        $nearSphere:{ 
          $geometry:{ 
           type:"Point", 
           coordinates:[-2.551010, 48.59123] 
          }, 
        $maxDistance:2000 
        } 
       } 
       }); 

Beachten Sie, dass $maxDistance in Meter. Ihr Beispiel find() Koordinaten liegt weit über der von Ihnen angegebenen maximalen Entfernung.

Informationen zu v3.2 finden Sie unter $nearSphere oder $near Operatoren.

Verwandte Themen