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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With