2014-01-16 27 views
1

我有一個我正在使用Google Map的網頁。當用戶拖動地圖並放開時,我需要向服務器查詢落在地圖可見區域範圍內的所有數據點。我可以很容易地通過JavaScript API獲取地圖可見區域的東北和南西座標,本質上提供了一個邊界矩形。但是在服務器上,我依賴於一個數據庫,其地理查詢API只支持中心點和半徑的查詢。所以基本上我想要做的是弄清楚我需要至少包含東北和西南點的最小半徑圓。計算地球上圍繞東北/東西方向的限定矩形的最小圓的半徑

我想到的最簡單的算法包括找到NE和SW座標之間的中心點,然後測量半徑作爲從中心點到NE或SW座標的距離。在一個簡單的歐幾里德空間中,我很樂意這樣做,但我想我可能會在地球的非平面座標系中出現問題。我甚至無法說服自己,如果我知道中心點,中心與NE以及中心與SW之間的距離相同。

我遇到了一個平面二維曲面上的最小圓的算法,還有算法描述了相反的圓心和半徑的邊界框。儘管如此,我還沒有遇到這個特定問題的簡明算法。

回答

1

我假設你稱之爲東西和南北座標是經度和緯度。您可以將它們轉換爲笛卡爾點並找到您所在地區的邊緣點之間的中點。這將在地球表面以下產生一個點C',其中心C點的經度和緯度相同(只有當你的經度差異小於180°時,纔會有效;否則,你會得到一個點如果您需要笛卡爾座標作爲中心點,則可以通過調整半徑以找到新的中心點,將C'投影到曲面上。

地球表面兩點之間的距離可以用公式great-circle disnatce計算。

轉變很容易,如果你認爲地球是半徑爲R =6373公里一個完美的球體:

x = R * cos(lat) * cos(lon) 
y = R * cos(lat) * sin(lon) 
z = R * sin(lat) 

和背部:

lon = atan2(y, x) 
lat = atan2(z, r) with r = sqrt(x*x + y*y) 

(但地球沒有一個恆定的半徑,所以你可能想要使用更好的座標系,也許ECEF如在this answer中解釋,如果你需要更高的精度。)

我的第一個想法是根據經度和緯度找到你的中點,如果你照顧緯度的wrapping,那應該沒問題。然後根據公式great-circle計算你的距離。但是如果你的地圖區域包含一個極點,那麼平均經度和緯度似乎並不明智。