2011-06-01 34 views
1

我有一個MySQL數據庫,看起來這樣的計算半徑:Eeek! - 只有緯度和經度

Postcode int(4), 
City varchar, 
State varchar, 
Latitude decimal(7,4), 
Longitude decimal(7,4) 

我希望用戶輸入他們的郵編(1660例如)和X半徑(可以說10 )英里或公里。當他們進行搜索時,我想要返回該半徑內所有城市的列表。我有一個數據庫,其中包含澳大利亞所有地區的所有郵政編碼,城市,緯度,經度等。

+2

與之密切相關的(如果不是重複):[公式來計算地理位置接近](http://stackoverflow.com/q/2096385) – 2011-06-01 22:43:11

+1

一個類似的問題,而不是特定於SQL實現: http://stackoverflow.com/q/27928/238688 – 2011-06-01 22:48:12

+0

是的,仍然困惑。 Forumla仍然沒有任何意義,因爲它並沒有特別告訴我在10公里以內會發生什麼事。只有那點a和b相距x公里。爲了給傷口加鹽,他們這樣說:「正如你所看到的,Haversine公式和Cosines的球形定律之間沒有明顯的差別,但是與Vincenty公式相比,兩者的距離偏移高達22公里,因爲它使用橢球體近似地球而不是球體。「 22公里的偏移?那麼這似乎並不準確!! ???? – user764226 2011-06-02 19:33:43

回答

1

如果你可以犧牲一些精度(由一個矩形區域,從後置代號1660在10英里選擇城市),那麼該解決方案可以是簡單的:

  1. 找出的郵政編碼的經度和緯度1660
  2. 計算矩形區域的左上角和右下角(10英里的左側和頂部,10英里的底部和右側)
  3. 使用查詢,如:從表中選擇的城市,bottom_right_latitude和top_left_latitude之間的經度以及top_left_longitude和bottom_right_longitude之間的經度

如果它必須精確到半徑10英里(這意味着該區域是一個圓圈),那麼解決方案將非常複雜,無法在單個查詢中做到這一點。您需要考慮一些幫助列,並使用距離和方位計算公式來完成此操作。

參考:Calculate distance, bearing and more between Latitude/Longitude points