Mysql 在sql查询中,从特定纬度和经度查找所有最近的带lat和long的邮政编码

Mysql 在sql查询中,从特定纬度和经度查找所有最近的带lat和long的邮政编码,mysql,sql,google-maps,Mysql,Sql,Google Maps,我有一个数据库表,其中有4列 1. id 2. person_name 3. country 4. zip_code 现在我想要所有的邮政编码和它们的真实纬度和经度,它们在给定的半径范围内,距离给定的纬度10英里 假设我的纬度和经度是(19.24947300,72.85681400),距离是10英里,那么我应该进行什么SQL查询来返回所有最近的邮政编码及其纬度 我只有以下问题 SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180

我有一个数据库表,其中有4列

1. id
2. person_name
3. country
4. zip_code
现在我想要所有的邮政编码和它们的真实纬度和经度,它们在给定的半径范围内,距离给定的纬度10英里

假设我的纬度和经度是(19.24947300,72.85681400),距离是10英里,那么我应该进行什么SQL查询来返回所有最近的邮政编码及其纬度

我只有以下问题

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)作为“距离”与“成员”之间的“距离”我不太明白你的意思

但它需要表中所有邮政编码的lat-long,但我希望在运行时使用它们

因为您需要SQL查询,所以我假设您有一个包含每个邮政编码纬度和经度的表

您可能不应该在SQL查询中进行所有这些计算。首先,我会将10英里x 10英里正方形中的每个邮政编码放在查询位置的中心,然后,如果您真的需要10英里半径内的邮政编码,请检查您的程序(我假设您使用的是PHP,因为您有以$开头的变量)

从邮政编码位置选择邮政编码、纬度和经度
其中纬度>19.24947300-距离,纬度<19.24947300+距离
和经度>72.85681400-距离和经度<72.85681400+距离
其中,距离大致相当于您必须计算的纬度/经度的10英里


然后,如果需要的话,可以在PHP(或您正在使用的任何语言)中检查每个结果,看看它是否确实距离查询点不到10英里。我无法帮助您精确地将纬度和经度转换为以英里为单位的距离。

我想这个被抛弃的问题已经解决了,但让我在这里分享一下我的观点,以防其他人正在与这个问题作斗争。我提供了3个选项,用于使用lat从数据库压缩文件,只要查找:

DB查找选项1(快速和脏):

设置为横向=41.675868; 设置为@long=-73.864484; 设置@tol=.05

mytable
.ZipCodes中选择*
其中纬度>=@lat和纬度=@long和经度这两种方法有效,但仅大致有效。。。您确实需要计算DB中lat/lon到lat/lon之间的距离。
SELECT zip, latitude, longitude FROM zip_positions
WHERE latitude > 19.24947300 - DISTANCE and latitude < 19.24947300 + DISTANCE
AND longitude > 72.85681400 - DISTANCE and longitude < 72.85681400 + DISTANCE
           $qry = "SELECT zipcode
            FROM (SELECT *,
                (((ACOS(SIN(({$lat} * PI() / 180)) * 
                SIN((`latitude` * PI() / 180)) + COS(({$lat}  * PI() / 180)) * COS((`latitude` * PI() / 180)) * 
                COS((({$long} - `longitude`) * PI() / 180)))) * 180 / PI()) * 60 * 1.1515 * 1.609344) 
            AS distance
            FROM
            `MyDB`.ZipCodes) ZipCodes
            WHERE distance <= 5
            LIMIT 1
    ";