当前位置: 首页 > 面试题库 >

根据半径从地图数据库中选择点

云和同
2023-03-14
问题内容

我有一个数据库,该数据库具有点的纬度/经度。如果我要选择以特定点为中心的特定范围内的所有点,那么如果该点上有任何点,则可以正常工作,但是不会被选中!

我使用以下查询:

SELECT *, ( 6371 * acos( cos( radians(-27.5796498) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-48.543221) ) + sin( radians(-27.5796498) ) * sin( radians( latitude ) ) ) ) AS distance FROM map HAVING distancia <= 2

在半径大于2的情况下,地图的中心位于[-27.5796498,-27.5796498]。如果某个点位于此非常精确的中心,则此查询的效果很好,但不会被选中。为什么?

编辑:我发现上面的公式为所有点但返回到位于中心MYSQL的点都返回了一个好的值,将“
NULL”值返回到列“距离”!专业人士如何处理此类问题或使用SQL在包括中心点的范围内选择点的问题?

EDIT2:我可以创建另一个查询来选择位于半径最中心的所有点,但这效率不高,也许某些数学向导可以提供更好的公式。


问题答案:

有时,ACOS()当距离很小时,to的参数可能只是略大于1(略微超出该函数的范围)。由于Vincenty,有更好的距离公式。它使用ATAN2(y,x)函数而不是ACOS()函数,因此在数值上更稳定。

就是这个。

DEGREES(
    ATAN2(
      SQRT(
        POW(COS(RADIANS(lat2))*SIN(RADIANS(lon2-lon1)),2) +
        POW(COS(RADIANS(lat1))*SIN(RADIANS(lat2)) -
             (SIN(RADIANS(lat1))*COS(RADIANS(lat2)) *
              COS(RADIANS(lon2-lon1))) ,2)),
      SIN(RADIANS(lat1))*SIN(RADIANS(lat2)) +
      COS(RADIANS(lat1))*COS(RADIANS(lat2))*COS(RADIANS(lon2-lon1))))

此函数以度为单位返回其结果。一个学位有111.045公里。60海里。69英里。因此,将结果乘以这些数字之一即可得出距离。有一个更完整的书面记录,包括存储的功能定义为MySQL,这里。

另一个解决方案是使用ISNULL(ACOS(formula), 0.0)



 类似资料:
  • 问题内容: 我有一个表,该表的列包含各个位置的纬度和经度。 然后,我还会从浏览器中的地理位置获得一个用户位置。 我需要做的是从表中找到所有记录,其中的值在10 km半径(或X km半径)内,并按距离最近的顺序排序。 我的表在列上有一个索引。 问题答案: 我目前正在从事一个项目,该项目正在计算多个位置之间的距离。我正在使用以下查询来选择给定半径内的object_id。 我无法解释ACOS公式本身,因

  • 问题内容: 我有一个称为Data的数据库,它是数据库中每个实体的父级。它包含Id等通用属性。然后,我有了一个扩展Data的实体,这也是由于其子类的通用功能而引起的。我的数据库中的映射是正确的。 这是我的等级制度的一个例子 并且表已正确映射: 无论如何,是否在数据库中查询所有作为Employee实例的Employee子类(FullTimeEmployee,PartTimeEmployee),而不在查

  • 我又有一个问题,关于在netbean中使用数据库程序。这是我的问题,我有一个包含男性和女性按钮的按钮组。当你点击“提交”按钮时,选中的按钮将把它的文本写入MySQL数据库。所以问题是,我不知道它的反面。 我将使我的问题尽可能清楚。我想从数据库中检索文本,并在按钮组的一个按钮中选择检索到的文本。 例如,我从数据库中检索了“男性”,所以我想要一个代码来选择“男性”单选按钮。谢谢。 编辑: 所以我现在明

  • 我正试图从数据库表中检索最后一条记录。我的查询如下: MID是员工id代码,主键是id。 因为主键(在我的例子中)是整数,并且在每次插入记录时自动递增,所以我试图在主键的基础上获取最后一条记录,因为与其他记录相比,最后一条记录将具有最高值的主键。 但是我不能制定如何给出条件指定最高值的主键。我需要添加主键,如下所示:

  • 问题内容: 我正在建立一个网站来学习编码,并且正在尝试建立一个工具,用户单击一个选择/下拉列表,其中包含从数据库 cat 提取的某些类别名称,然后另一个选择与从数据库 subcat 提取的子类别名称一起出现。这几乎与Yelp的(向下分类)完全一样,就像Yelp的(向下分类)一样。 我还做了一个图: 我已经有一个从 cat 数据库中提取的类别下拉列表: 我有一个从subcat数据库中提取的subca

  • 如何根据Pandas中某个列中的值从中选择行? 在SQL中,我将使用: 我试图查看熊猫的文档,但我没有立即找到答案。