sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb kontrollera om punkten är i polygon

Det verkar ha med beställningen att göra. Om du använder $geoWithin och du försöker hitta punkter inuti en polygon, det som finns inom är fältet du söker på. Men $geoIntersects fungerar i båda riktningarna, så du kan söka efter punkter inuti polygoner eller polygoner som innehåller punkter, t.ex.:

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

Observera också att du måste upprepa den första punkten i polygonen i slutet. Om du tar bort det sista paret får du en $err :

Kan inte kanonisera frågan:BadValue bad geo query"-fel.

Det verkar som att MongoDB tillåter dig att infoga ogiltiga geometrier och klagar bara när du försöker lägga till ett 2dsphere-index eller gör en intersects/within/near-fråga, vilket jag antar är rimligt, eftersom GeoJSON kan vara giltig JSON utan att vara en giltig geometri.



  1. ruby resque utan lastskenor miljö

  2. Node.js mongodb drivrutin async/await-frågor

  3. Hur reparerar jag min mongodb?

  4. Transaktionsstöd i MongoDB