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

mongodb controlla se il punto è nel poligono

Sembra avere a che fare con l'ordine. Se stai usando $geoWithin e stai cercando di trovare punti all'interno di un poligono, la cosa che è all'interno è il campo su cui stai cercando. Tuttavia, $geoIntersects funziona in entrambe le direzioni, quindi puoi cercare punti all'interno di poligoni o poligoni contenenti punti, ad esempio:

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

Inoltre, nota che devi ripetere il primo punto del poligono alla fine. Se rimuovi la coppia finale, otterrai un $err :

Impossibile canonizzare la query:errore di query geografica errata BadValue".

Sembra che MongoDB ti permetta di inserire geometrie non valide e si lamenta solo quando provi ad aggiungere un indice 2dsphere o esegui una query interseca/all'interno/vicino, il che, suppongo sia ragionevole, poiché GeoJSON può essere un JSON valido senza essere una geometria valida.