2017-04-03 3 views
0

Je rencontrais beaucoup de problèmes avec la requête suivante

location: { $geoWithin: { $centerSphere: [[lon,lat],radians] } } 
Mongo

Il retourne uniquement Points GeoJSON et ignore tous mes GeoJSON Polygones pour une raison quelconque. Les états documentation indiquent:

Vous pouvez utiliser l'opérateur $ centreSphere sur les objets GeoJSON et les paires de coordonnées héritées.

J'utilise Mongoose pour exécuter les requêtes et mon GeoJSON est coverted de WellKnown texte par le module de NPM wellknown. Voici comment mon GeoJSON regarde après le module bien connu les a converti:

"location": { 
    "coordinates": [ 
     22.1, 
     33.3 
    ], 
    "type": "Point" 
} 

et

"location": { 
    "coordinates": [ 
     [ 
      [ 
       43, 
       30 
      ], 
      [ 
       40, 
       28 
      ], 
      [ 
       49, 
       27 
      ], 
      [ 
       43, 
       30 
      ] 
     ], 
     [ 
      [ 
       44, 
       28 
      ], 
      [ 
       44.7, 
       28.8 
      ], 
      [ 
       46, 
       28 
      ], 
      [ 
       44, 
       28 
      ] 
     ] 
    ], 
    "type": "Polygon" 
} 

Mon schéma Mongoose est défini comme:

location: { 
    type: schema.Types.Mixed, 
    index: '2dsphere', 
    required: false 
} 

Je dois ajouter que les méthodes withinPolygon fonctionne comme prévu et je reçois à la fois les points et les polygones retournés. Ce qui suit fonctionne complètement bien:

location: { $geoWithin: { $geometry: geoJSON } } 

Nous vous remercions de toute aide. J'ai lu la documentation et je ne vois nulle part où il est mentionné que $ centreSphere ne renvoie que des points geoJSON. Avec la version récente de MongoDB version 3.6.0-rc0, vous pouvez maintenant interroger GeoJSON LineStrings et Polygons avec $geoWithin opérateur géospatial $centerSphere

Répondre

1

Voir aussi SERVER-27968 plus d'informations sur la mise à jour.