sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb tjek om punktet er i polygon

Det ser ud til at have med ordren at gøre. Hvis du bruger $geoWithin og du forsøger at finde punkter inde i en polygon, det der er indenfor er det felt du søger på. Dog $geoIntersects virker i begge retninger, så du kan søge efter punkter inde i polygoner eller polygoner, der indeholder punkter, f.eks.:

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

Bemærk også, at du skal gentage det første punkt i polygonen til sidst. Hvis du fjerner det sidste par, får du en $err :

Kan ikke kanonisere forespørgsel:BadValue dårlig geo-forespørgsel" fejl.

Det ser ud til, at MongoDB giver dig mulighed for at indsætte ugyldige geometrier og kun klager, når du forsøger at tilføje et 2dsphere-indeks eller foretager en intersects/within/near-forespørgsel, hvilket jeg formoder er rimeligt, da GeoJSON kan være gyldig JSON uden at være en gyldig geometri.



  1. Ønsker at bruge Redis som en begivenhedsstatistikbutik

  2. mongodb nodejs - konvertering af cirkulær struktur

  3. Redis Support på sekundært indeks

  4. Redis failover med StackExchange / Sentinel fra C#