MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb prüft, ob sich der Punkt im Polygon befindet

Es scheint mit der Bestellung zu tun zu haben. Wenn Sie $geoWithin verwenden und Sie versuchen, Punkte innerhalb eines Polygons zu finden, das Ding, das sich darin befindet, ist das Feld, in dem Sie suchen. Allerdings $geoIntersects funktioniert in beide Richtungen, sodass Sie nach Punkten innerhalb von Polygonen oder Polygonen, die Punkte enthalten, suchen können, z. B.:

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

Beachten Sie auch, dass Sie den ersten Punkt des Polygons am Ende wiederholen müssen. Wenn Sie das letzte Paar entfernen, erhalten Sie ein $err :

Abfrage kann nicht kanonisiert werden:BadValue-Fehler bei der Geo-Abfrage.

Es scheint, dass MongoDB Ihnen erlaubt, ungültige Geometrien einzufügen und sich nur beschwert, wenn Sie versuchen, einen 2dsphere-Index hinzuzufügen oder eine Intersects/Within/Near-Abfrage durchzuführen, was meiner Meinung nach vernünftig ist, da GeoJSON gültiges JSON sein kann, ohne eine gültige Geometrie zu sein.