我有两个定义静态经度和纬度的变量。我希望能够定义一个包含以下内容的多维数组:id,经度和纬度。
我想要实现的目标 - 从静态经度到数组循环,如果在半径50英里(或其他)内找到某些东西,它会选择潜在的并列出它们。
我不确定我可以用什么公式或算法来检查半径并带回最近的值。
请注意:此示例中未使用数据库。
到目前为止:
$mainLong = 57.7394571;
$mainLat = -4.386997;
$main = array(
array("loc_1",57.7394571,-4.686997),
array("loc_2",51.5286416,-0.1015987),
array("loc_3",51.2715146,-0.3953564),
array("loc_4",50.837418,-0.1061897)
);
foreach ( $main as $key => $value ) {
if($value[1] == $mainLong){
print_r($value);
}
}
答案 0 :(得分:0)
Haversine公式可以提供帮助。 这是一个示例算法。 你可以尝试一下。
%% Begin calculation
R = 6371; % Earth's radius in km
delta_lat = locs{2}(1) - locs{1}(1); % difference in latitude
delta_lon = locs{2}(2) - locs{1}(2); % difference in longitude
a = sin(delta_lat/2)^2 + cos(locs{1}(1)) * cos(locs{2}(1)) * ...
sin(delta_lon/2)^2;
c = 2 * atan2(sqrt(a), sqrt(1-a));
km = R * c; % distance in km
%% Convert result to nautical miles and miles
nmi = km * 0.539956803; % nautical miles
mi = km * 0.621371192; % miles