使用我发现的示例代码可以计算 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' 并更改此 – 经度 至 - 经度
我找到了这段代码:
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' 并更改此 – 经度 至 - 经度