mongo 2.6
I have some amount of stored polygons. And I have a point. I what to know if this point fits any of stored polygons
document example
{ ..., "polygons" : [ [ 17.60083012593064, 78.18557739257812 ], [ 17.16834652544664, 78.19381713867188 ], [ 17.17490690610013, 78.739013671875 ], [ 17.613919673106714, 78.73489379882812 ] ], ... }
There is nearly the same question already Mongodb : Check if a point is inside a stored polygon. But it is not working for me - this query has to give at least one result(the one in example) - but it does not.
db.areas.find( { polygons : { $geoIntersects : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } )
Actually if I chose a point on a border of any polygon - it does.
$geoWithin
method has to do the work as mondodb
documentation says.
but any of these queries do not work
db.areas.find( { polygons : { $geoWithin : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } ) - not supported with provided geometry
db.tradeareas.find( { polygons : { $geoWithin : { $geometry : {type:"Polygon",coordinates: inside_polygon} } } } ) - BadValue bad geo query
It seems I miss something but cant understand what and where.
I would be grateful for help.
It seems to be to do with the order. If you are using $geoWithin and you are trying to find points inside a polygon, the thing that is within is the field you are searching on. However, geoIntersects works in either direction, so you can search for points inside polygons, or polygons containing points, eg,
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 ] }
}
}
});
Also, note that, you need to repeat the first point of the polygon at the end. If you remove the final pair, you will get a "$err" : "Can't canonicalize query: BadValue bad geo query" error.
It seems that MongoDB allows you to insert invalid geometries and only complains when you try and add a 2dsphere index or do an intersects/within/near query, which, I suppose is reasonable, as GeoJSON can be valid JSON without being a valid geometry.