Sql 确定一个坐标是否在另一个坐标的半径内

Sql 确定一个坐标是否在另一个坐标的半径内,sql,coordinates,latitude-longitude,Sql,Coordinates,Latitude Longitude,假设我有一个包含坐标的行表 哪种最好的方法可以只提取位于另一个坐标半径内的坐标行 为了简化我的问题,我举了以下例子: Table like: Columns: Latitude, Longitude. Row1: 23.44444 24.55555 Row2: 32.44444 28.22222 Row3: 35.11111 32.12345 在SQL语句中,如何获取以第3行为半径的坐标行(例如?这说明了如何在SQL Server中执行此操作 下面是如何在MySQL中实

假设我有一个包含坐标的行表

哪种最好的方法可以只提取位于另一个坐标半径内的坐标行

为了简化我的问题,我举了以下例子:

Table like:
Columns: Latitude, Longitude.
Row1:    23.44444  24.55555
Row2:    32.44444  28.22222
Row3:    35.11111  32.12345
在SQL语句中,如何获取以第3行为半径的坐标行(例如?

这说明了如何在SQL Server中执行此操作

下面是如何在MySQL中实现这一点:

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + 
         COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * 
         PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC
SELECT((ACOS(SIN($lat*PI()/180)*SIN(lat*PI()/180)+
COS($lat*PI()/180)*COS(lat*PI()/180)*COS($lon-lon)*
PI()/180))*180/PI())*60*1.1515)作为距离
来自成员

距离你说的半径是什么意思?您想在一定距离内通过,比如说5英里,然后找到x行5英里内的所有行吗


如果距离公式是:

D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) +
                       cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi / 180) 
                 )  * 180 / pi)
其中Y和Z-是要测试的每行的点,Y和Z-是示例行的点

所以你可以做这样一件事:

  • 选择表中的每一行并获取其
    lon
    lat
  • 应用来自的查询,将
    $lon
    $lat
    更改为数据表单点1

  • 我不知道如何在access中进行此操作。但是这种方法非常慢。

    谢谢,我如何在Access数据库中使用它?据我所知,您无法在Access数据库中创建这种类型的函数。你应该试试第二种方法。(需要进行一些修改。例如,我相信access没有PI()函数)这是以英里或公里为单位的吗?我知道这是旧的,但1.1515告诉我们这是以英里为单位的。接下来是一个旧主题,我知道,但想为后代添加,如果使用SQL Server 2008,内置的
    GEOGRAPHY
    空间数据类型可以轻松计算两个坐标之间的距离(例如
    STDistance
    方法)。我觉得这样更好,因为它还考虑了地球的曲率/椭球形状。(这个答案顶部链接的文章似乎假设一个平面投影。)如果距离足够短,可能不会太明显,但可能跨越更大的距离。请看一个简明的例子。是的,我会使用公里数,但你有这个想法。问题是我需要一个access db。使用VBA函数,有大量的googleable代码片段需要修改。