增加由GPS坐标限制的区域的大小

时间:2012-10-22 23:12:30

标签: perl google-maps gps

我有一个webapp,我在其中查询用户附近的结果。由于应用程序的工作方式,用户位于由4个点限定的正方形中,左下角为2个,右上角为2个:latsw,latne,longsw,longne。 我需要增加“方形”的大小,同时保持用户在广场的中心。我一直在尝试使用基本的东西:

$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平面上并不真正表现出线性。有什么想做这样的事情,同时保持相对简单?

1 个答案:

答案 0 :(得分: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(例如,增加50%的增加为1.5):

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

只要你不是太靠近极点,赤道或本初子午线(以避免尴尬的范围/符号问题),或者不使用太大的边界框(以避免与二维平面行为的尴尬偏差)这应该让你进入你正在寻找的球场。