我有一个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平面上并不真正表现出线性。有什么想做这样的事情,同时保持相对简单?
答案 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
只要你不是太靠近极点,赤道或本初子午线(以避免尴尬的范围/符号问题),或者不使用太大的边界框(以避免与二维平面行为的尴尬偏差)这应该让你进入你正在寻找的球场。