2012-10-22 27 views
0

我有一個Web應用程序,在該應用程序中查詢用戶附近的結果。由於該應用程序的工作方式,用戶位於以4點爲邊界的正方形中,左下角爲2,右上角爲2:latsw,latne,longsw,longne。 我需要增加「廣場」的大小,同時保持用戶在廣場的中心。我一直在試圖用基本的東西,如:增加由GPS座標包圍的區域的大小

$latsw= $latsw - $increasing_factor; 
$latne= $latne + $increasing_factor; 
$longsw=$longsw - $increasing_factor; 
$longne=$longne + $increasing_factor; 

$latsw= $latsw/$increasing_factor; 
$latne= $latne * $increasing_factor; 
$longsw=$longsw/$increasing_factor; 
$longne=$longne * $increasing_factor; 

但結果只是給了我一個轉移區域或其他一些怪異的行爲。我想這是因爲GPS座標在2D平面上的表現並不是線性的。任何想法做這樣的事情,同時保持它相對簡單?

+0

現在我想到了,這個問題本身並沒有太多的編碼,所以如果有人覺得這應該在另一個網站,讓我知道。 – leonsas

回答

1

你可以嘗試這樣的事:

你要保持同一中心經度/緯度,所以計算出第一(通過平均 兩個經度和兩個緯度你已經有了):

center_long = (ne_long + sw_long)/2 
center_lat = (ne_lat + sw_lat)/2 

然後通過差分兩個經度和兩個緯度來計算邊界框的大小以獲得delta_long,delta_lat。

delta_long = ne_long - sw_long 
delta_lat = ne_lat - sw_lat 

通過一些因子乘以調整delta_long和delta_lat(比方說,1.5增加了50%):

new_delta_long = delta_long * increasing_factor 
new_delta_lat = delta_lat * increasing_factor 

最後計算出新的邊界點:

new_corner_long = center_long +/- new_delta_long 
new_corner_lat = center_lat +/- new_delta_lat 

只要因爲你不太靠近極點,赤道線或素數子午線(爲了避免範圍/符號問題),或者不使用太大的邊界框(爲了避免與二維平面行爲的尷尬偏差),應該讓你進入你要找的東西。