使用我发现的示例代码来计算纬度/经度 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/

看起来它应该有效,但我只得到错误。这是我的表的结构:

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

我选择了一个随机的纬度/经度来代替代码中的$lat和$lon。

但是我正在尝试的任何东西都不起作用。表名称为压缩字段。

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

谢谢-理查

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

好的,我从@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

是否将项目列为"距离"...但是当我运行它时,我在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

如何让结果列出该表中落在该距离内的唯一记录,而不是显示距离?

例如,在该表中,我还有一个auto_increment主键,因此我希望它列出该距离中的所有id。该字段的名称是:"zfid"

那么有没有办法让它选择我给它的经度/纬度在 10 英里外zfid

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

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

    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

将此"具有距离<=10"更改为"具有距离<="10",并将此"经度"更改为

"经度"