使用 Java 使用 morphia mongodb 查找地理空间
我想用吗啡框架查询一些地理位置点。我使用我的纬度、经度和半径(100 公里)以及“Near”方法来查询我所在位置周围的其他人,并限制 10 个结果。就像这样:
morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100).limit(10).asList();
它没有错误,但结果显示了我周围且超出我半径范围(100公里)的位置点。所以,查询结果时我的半径并不重要。
我的查询语句有什么问题?
预先感谢您
I would like to query some geo location points with morphia framework. I use my latitude, longitude, and radius(100 km.) with "Near" method to query the other around my location and limit 10 results. Just like this :
morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100).limit(10).asList();
It doesn't error but the result shows me the location points that around me and out of scope of my radius(100km.). So, my radius doesn't concern when query the result.
What is my problem with query statement?
Thanks you in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
南北纬度差弧度的长度,在任何纬度约为60海里、111公里或69法定英里;您可以在 wikipedia 或 mongo 地理空间页面中阅读更多相关信息a href="http://www.mongodb.org/display/DOCS/Geospatial+Indexing" rel="nofollow">地球是圆的,但地图是平的。
使用公里时,将距离换算为 111.12(1 度大约为 111.12 公里);如果使用英里,则将距离换算为 69。
因此,将查询更改为
并确保 mongodb 接受 [long,lat] 中的坐标。
The length of an arcdegree of north-south latitude difference, is about 60 nautical miles, 111 kilometres or 69 statute miles at any latitude; You can read more about here in wikipedia or in mongo geospatial page The Earth is Round but Maps are Flat.
Convert distance by 111.12 (one degree is approximately 111.12 kilometers) when using km, or by 69 (for miles).
So change your query to
And make sure mongodb accepts the co-ordinates in [long,lat].
根据网站(MongoDB :使用球面几何计算二维索引中的距离)为了获得我们所看到的距离的弧度,我们必须使用 3.959 英里内的土地或6.371 公里。
查看文档(MongoDB:$nearSphere)我认为呼叫应该是:
就我而言,经过一番检查,这就是我的工作方式。
According to the website (MongoDB: Calculate Distances in a 2d Index Using Spherical Geometry) to get the radians of the distance where we look, we have to use the land within 3.959 miles or 6.371 km.
Viewing the documentation (MongoDB:$nearSphere) I think the call should be:
In my case and after some checking, this is how I work.