MongoDB:如何确定 GeoJson LineString 和具有半径的点的交集
Posted
技术标签:
【中文标题】MongoDB:如何确定 GeoJson LineString 和具有半径的点的交集【英文标题】:MongoDB: How to determine intersection of GeoJson LineString and a Point with radius 【发布时间】:2015-02-17 00:50:03 【问题描述】:如何在 MongoDB 中使用地理空间查询来确定,由 Point 和 radius 确定的圆是否与 LineString 相交?
用例:
MongoDB GeoJson LineString 对象定义如下:
db.places.insert(
loc : type: "LineString", coordinates: [ [-121.9420624, 37.3734995], [ -121.9388008, 37.3755458], [-121.9408607, 37.3720671] ] ,
name: "Small trail"
);
用户位置是 [ -121.928887, 37.299849 ] 如何判断一个以用户位置为中心,半径为10英里的圆是否与LineString相交?
我期待一个类似的查询
db.places.find(loc : $geoIntersects :$geometry :$centerSphere: [ [ -121.928887, 37.299849 ], 100 / 3959 ]);
但是这个不行
【问题讨论】:
【参考方案1】:文档令人困惑,但我认为最重要的是$geoIntersects
不适用于$centerSphere
。不过,$centerSphere
确实适用于 $geoWithin
。这对您的用例有用吗?语义有点不同,但可能足够接近。
【讨论】:
@NitinSingh 文档说$geoWithin
“选择具有完全存在于指定形状内的地理空间数据的文档。”即使这条线不完全在圆圈中,这是否真的有效?你也可以反之查询(找到给定线路径的圆圈)?以上是关于MongoDB:如何确定 GeoJson LineString 和具有半径的点的交集的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MongoDB 2.4.x 中存储附加数据以使其符合 geoJSON 格式
Node.js如何将geojson从mongodb传递给我可以在前端使用的对象
就 mongoDb 而言,GeoJSON 和 Legacy 坐标对有啥区别?