【发布时间】:2016-10-06 10:46:33
【问题描述】:
我有一个对 sql 数据库的查询,以查找给定邮政编码的给定半径内的所有匹配邮政编码(db 表包含经度和纬度信息)。
我使用的是我在 stackoverflow 上找到的算法:
$sql = 'SELECT distinct(ZipCode) FROM zipcode WHERE (3958*3.1415926*sqrt((Latitude-'.$lat.')*(Latitude-'.$lat.') + cos(Latitude/57.29578) cos('.$lat.'/57.29578)(经度-'.$lon.')*(经度-'.$lon.'))/180)
它起作用了,但我发现结果并不完全符合预期。例如,如果我从 11572(纽约州海滨)进行 40 英里半径搜索,它不会返回明显在 40 英里半径范围内的许多曼哈顿邮政编码(即 10023)。
我希望有人可能有另一种方法?
谢谢,马克
【问题讨论】:
-
尝试:其中 sqrt(pow(Latitute - '$.lat', 2) + pow(Longitude -'.$lon', 2))
-
我可能猜想问题在于,这是测量 40 英里半径内的邮政编码中心 - 您可能想要 40 英里半径内的邮政编码和区域。这听起来可能吗?
-
我试了一下,nmtuan,但它返回了一个巨大的列表,远远超出了给定的 40 英里半径,并导致了致命的超时异常。
-
谢谢,gbtimmon。我明白你在说什么,但我认为这不是问题所在。从 11572 开始,方圆 40 英里的范围包含并超出曼哈顿,以至于丢失的邮政编码,无论是中心还是其他地方,都必然落在该半径范围内。
标签: algorithm search formula zipcode radius