当前位置: 首页 > 知识库问答 >
问题:

选择半径内所有点的有效方法

姜育
2023-03-14

我正在使用meanstack应用程序。所以我有mongodb系列,其中包含全球各地的位置。模式loook如下所示。

[{
address : "example address",
langitude : 79.8816,
latitude : 6.773
},
{...}]

选择圆内所有点(预定义点和预定义半径)的有效方法是什么。。??

使用SQL查询也可以做到这一点。但我想要一种有效的方法,不需要逐个迭代,检查它是否在该半径内。

共有1个答案

雷硕
2023-03-14

坐标为{lat1,lon1}和{lat2,lon2}的两点之间的距离d由下式给出

d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 +
    cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))

上面的公式给出了以弧度为单位的d。要得到以公里为单位的答案,请使用下面的公式。

distance_km ≈ radius_km * distance_radians ≈ 6371 * d

这里,魔法数字6371大约是行星地球的半径。这是在您的情况下必须进行的最小计算。可以计算此距离并选择距离小于半径值的所有记录。

更好的方法

您可以使用支持地理位置查询的Elasticsearch以获得更好的性能。

 类似资料:
  • 问题内容: 我想选择位于最右侧的某个字符(-)之后的所有内容。 例如。 我想选择零件 谢谢! 问题答案: 您可以使用:

  • 我正在努力解决的问题是,我不能通过使用,因为它选择了不需要的平铺(在我给出的示例中,选择(1,1)平铺并给出1的范围也会给出(3,0)平铺(我实际上需要的平铺是(0,1)(0,2)(1,0)(1,2)(2,1)(2,2)),它有点靠近平铺(因为数组的结构方式),但这并不是我真正想要选择的东西。 有人能在这里给我指个正确的方向吗?

  • 问题内容: 我有这个脚本,它将在Google地图上显示自定义标记,但是我想包含一个输入文本框,并且能够输入城市/州和邮政编码,并查看其中是否有任何标记(例如400)距该城市/州或邮政编码的英里。如果地图可以是动态的,我会喜欢的,因此当您输入城市/州或邮政编码时,它会摆脱所有其他标记并仅保留该半径范围内的一个标记,从而在地图上显示结果,如果那太难了,那么说一个最接近单位的简单更改框也可以:)我搜索并

  • 问题内容: 这是CSV格式的PostgreSQL示例。 我在世界各地有成千上万行这样的跨越坐标。 我只想查询表中特定半径内的坐标。如何使用PostGIS和PostgreSQL做到这一点? 问题答案: 我结合了欧文(Erwin)和帕特里克(Patrick)的答案。

  • 我有一个特定包的工作代码,但我想为所有控制器、服务和dao包配置它,例如 com。abc。xyz。所容纳之物控制器 com。abc。xyz。所容纳之物服务 com。abc。xyz。所容纳之物道 com。abc。xyz。类别控制器 com。abc。xyz。类别服务 com。abc。xyz。类别dao公司 等等这是我的项目的基本包,有人可以帮助我如何去做它,使它适用于我的网络项目,包括控制器的所有类,

  • 本文向大家介绍MySQL 选择所有列(*),包括了MySQL 选择所有列(*)的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果 您可以通过执行以下操作从一个连接的一个表中选择所有列: 最佳实践*除非正在调试或获取row(s)关联数组,否则不要使用,否则架构更改(ADD / DROP /重新排列列)可能会导致讨厌的应用程序错误。另外,如果提供结果集中所需的列列表,MySQL的查询计划程序通