MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongodb verifique se o ponto está no polígono


Parece ter a ver com a ordem. Se você estiver usando $geoWithin e você está tentando encontrar pontos dentro de um polígono, o que está dentro é o campo que você está procurando. No entanto, $geoIntersects funciona em qualquer direção, então você pode procurar pontos dentro de polígonos ou polígonos contendo pontos, por exemplo:
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]
      }
    }
  }
});

Além disso, observe que você precisa repetir o primeiro ponto do polígono no final. Se você remover o par final, receberá um $err :

Não é possível canonizar a consulta:BadValue bad geo query" erro.

Parece que o MongoDB permite inserir geometrias inválidas e só reclama quando você tenta adicionar um índice 2dsphere ou faz uma consulta de interseção/dentro/perto, o que, suponho, é razoável, pois GeoJSON pode ser um JSON válido sem ser uma geometria válida.