sql >> Base de Datos >  >> NoSQL >> MongoDB

mongodb comprueba si el punto está en el polígono

Parece que tiene que ver con el orden. Si está utilizando $geoWithin y está tratando de encontrar puntos dentro de un polígono, lo que está dentro es el campo en el que está buscando. Sin embargo, $geoIntersects funciona en cualquier dirección, por lo que puede buscar puntos dentro de polígonos o polígonos que contengan puntos, por ejemplo:

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

Además, tenga en cuenta que debe repetir el primer punto del polígono al final. Si elimina el par final, obtendrá un $err :

No se puede canonicalizar la consulta:"Error de consulta geográfica incorrecta de BadValue".

Parece que MongoDB le permite insertar geometrías no válidas y solo se queja cuando intenta agregar un índice de 2dsphere o realiza una consulta de intersección/dentro/cerca, lo cual, supongo, es razonable, ya que GeoJSON puede ser JSON válido sin ser una geometría válida.