使用示例代码我发现计算纬度/经度10英里内的位置

时间:2016-01-29 09:15:55

标签: php mysql 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 / Long代替$ lat和$ lon代码。

但我正在尝试的任何工作。表名是zipfields。

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

谢谢你, -Richard

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

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

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

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

1 个答案:

答案 0 :(得分:1)

有一些特殊的字符,所以它不起作用我想,用这个:

    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

将此距离&lt; ='10'更改为距离&lt; =&#39; 10&#39; ,并更改此 - 经度 - 经度