sql >> Database >  >> NoSQL >> MongoDB

mongodb controleer of punt in polygoon is

Het lijkt met de bestelling te maken te hebben. Als u $geoWithin . gebruikt en je probeert punten binnen een veelhoek te vinden, het ding dat zich binnenin bevindt, is het veld waarop je zoekt. Echter, $geoIntersects werkt in beide richtingen, dus u kunt zoeken naar punten binnen polygonen of polygonen die punten bevatten, bijvoorbeeld:

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

Houd er ook rekening mee dat u het eerste punt van de veelhoek aan het einde moet herhalen. Als je het laatste paar verwijdert, krijg je een $err :

Kan zoekopdracht niet canonicaliseren:fout BadValue slechte geografische zoekopdracht.

Het lijkt erop dat je met MongoDB ongeldige geometrieën kunt invoegen en alleen klaagt wanneer je een 2dsphere-index probeert toe te voegen of een intersects/in/near-query doet, wat, denk ik, redelijk is, aangezien GeoJSON een geldige JSON kan zijn zonder een geldige geometrie te zijn.



  1. mongo-groepsvraag hoe velden te behouden

  2. Hoe unie-query's in mongoDB te schrijven?

  3. Democratische wachtrij in Sidekiq

  4. Alle collecties in een mongo-database weergeven in een nodejs-script