使用我发现的示例代码可以计算 Latitude/Longitude 10 英里以内的位置

Using Example Code I found to calculate locations within 10 miles of Latitude/Longitude

我找到了这段代码:

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

on this website: http://zcentric.com/2010/03/11/calculate-distance-in-mysql-with-latitude-and-longitude/

看起来应该可以,但除了错误我什么也没得到。这是我的 table:

的结构
Postal_Code varchar(25)
Place_Name  varchar(255)
State   varchar(255)
State_Abbreviation  varchar(2)
County  varchar(255)
Latitude    float
Longitude   float

所以我重命名了这些字段,但不确定我的做法是否正确:

SELECT ((ACOS(SIN("35.4262" * PI() / 180) * SIN(Latitude * PI() / 180) + COS("35.4262" * PI() / 180) * COS(Latitude * PI() / 180) * COS(("-97.079" – Longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zipfields` HAVING `distance`<=’10’ ORDER BY `distance` ASC

我选择了 运行dom Lat/Long 来代替代码中的 $lat 和 $lon。

但我尝试的任何方法都不起作用。 table 名称是 zipfields。

你能告诉我我做错了什么吗?

谢谢, -理查德

------更新--------

好的,我 运行 来自 @Pathik_Vejani 的建议,它确实得到了我的结果:

此代码:

SELECT ((ACOS(SIN("35.4262" * PI() / 180) * SIN(Latitude * PI() / 180) + COS("35.4262" * PI() / 180) * COS(Latitude * PI() / 180) * COS(("-97.079" - Longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` FROM `zipfields` HAVING distance<='10' ORDER BY `distance` ASC

是否将项目列为 'distance'... 但是当我 运行 它时,我在 phpMyAdmin 中看到一个错误。它是这样说的:

This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.

另外,榜单是这样的:

distance Ascending
0.00014448859333250288
6.617290577027735
7.585634557261859
7.92136532629013
7.981747924484232
8.65536684196846

如何获得结果以列出 table 中落入该距离内的唯一记录,而不是显示距离?

例如,在那个 table 中,我还有一个 auto_increment 主键,所以我希望它列出所有落在该距离内的 ID。该字段的名称是:"zfid"

那么有没有什么办法可以让它 select zfid 我给它的 longitudes/latitudes 在 10 英里以外的地方?

我不需要距离,我只需要那些记录的列表。

有一些特殊字符,所以我认为它不起作用,使用这个:

    SELECT zfid,
           ((ACOS(SIN("35.4262" * PI() / 180) * SIN(Latitude * PI() / 180) + COS("35.4262" * PI() / 180) * COS(Latitude * PI() / 180) * COS(("-97.079" - Longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance`
    FROM `zipfields`
    HAVING `distance`<='10'
    ORDER BY `distance` ASC

将此 HAVING 距离<='10' 更改为 HAVING 距离<='10' 并更改此 – 经度- 经度