2016-06-06 95 views
0

我有一個查詢到一個sql數據庫來查找給定的郵政編碼(該數據庫表包含經度和緯度信息)給定半徑內的所有匹配的郵政編碼。半徑郵政編碼搜索的替代算法?

我就是用這個算法,我發現這裏的計算器:

$ SQL = 'SELECT DISTINCT(郵編)FROM郵政編碼WHERE(3958 * 3.1415926 *的sqrt((緯度 - ' $ LAT「)*。 (Latitude - '。$ lat。')+ cos(Latitude/57.29578)cos('。$ lat。'/ 57.29578)(經度 - '。$ lon。')*(經度 - '。$ lon。' ))/ 180)< ='。$ radius。';';

它的功能,但我發現結果並不完全符合預期。例如,如果我從11572(Oceanside,NY)進行40英里半徑的搜索,它不會返回顯然在40英里半徑內的許多曼哈頓郵政編碼(即10023)。

我希望有人可能有另一種方法?

謝謝,馬克

+0

嘗試:where sqrt(pow(Latitute - '$ .lat',2)+ pow(Longitude - '。$ lon',2))<='$ .radius' – rocketspacer

+0

我可能猜測問題是這樣正在測量40英里半徑範圍內的郵政編碼中心 - 你可能想要和郵政編碼和40英里半徑的區域。這聽起來可能嗎? – gbtimmon

+0

我給了一個鏡頭,nmtuan,但它返回了一個超出40英里給定半徑的巨大列表,並導致了一個致命的超時異常。 – zargosh

回答

0

解決!結果發現算法沒有任何問題。我忽略了floatval()經度和緯度,它們被作爲一個字符串傳遞給公式。因此,奇怪的結果。使用floatval時,結果與他們應該一樣。也許這會幫助那些發現自己處於類似情況的人。

另一方面,我使用的geonames zipcode轉儲肯定缺少一些zip代碼。有誰知道更全面的選擇?