MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb vérifie si le point est dans un polygone

Cela semble être lié à la commande. Si vous utilisez $geoWithin et que vous essayez de trouver des points à l'intérieur d'un polygone, la chose qui se trouve à l'intérieur est le champ sur lequel vous recherchez. Cependant, $geoIntersects fonctionne dans les deux sens, vous pouvez donc rechercher des points à l'intérieur de polygones ou des polygones contenant des points, par exemple :

db.geom.insert({
  "polygons": {
    "type":"Polygon",
    "coordinates": [[
      [ 17.60083012593064, 78.18557739257812],
      [ 17.16834652544664, 78.19381713867188],
      [ 17.17490690610013, 78.739013671875],
      [ 17.613919673106714, 78.73489379882812],
      [ 17.60083012593064, 78.18557739257812]
    ]]
  }
});

db.geom.find({
  polygons: {
    $geoIntersects: {
      $geometry: {
        "type": "Point",
        "coordinates": [17.3734, 78.4738]
      }
    }
  }
});

Notez également que vous devez répéter le premier point du polygone à la fin. Si vous supprimez la dernière paire, vous obtiendrez un $err :

Impossible de canoniser la requête :erreur BadValue "mauvaise requête géographique".

Il semble que MongoDB vous permette d'insérer des géométries invalides et ne se plaint que lorsque vous essayez d'ajouter un index 2dsphere ou effectuez une requête intersects/within/near, ce qui, je suppose, est raisonnable, car GeoJSON peut être un JSON valide sans être une géométrie valide.