mongodb check if point is in polygon

旧街凉风 提交于 2019-11-28 20:29:36

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!