расчёт координат от точки по азимуту?

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Warden
Интересующийся
Сообщения: 25
Зарегистрирован: 16 сен 2015, 16:43
Репутация: 7
Откуда: Королёв

Re: расчёт координат от точки по азимуту?

Сообщение Warden » 05 май 2016, 12:34

ErnieBoyd писал(а):
Warden писал(а):$s - переход к угловой мере расстояния
Вы подставляете в формулы дугу s, как будто она в градусах, хотя она в радианах.
Большое спасибо, товарищ!!!

Warden
Интересующийся
Сообщения: 25
Зарегистрирован: 16 сен 2015, 16:43
Репутация: 7
Откуда: Королёв

Re: расчёт координат от точки по азимуту?

Сообщение Warden » 23 май 2016, 17:12

Ребят, такая беда, что нужно улучшить точность вычисления. У меня получается ошибка в районе 10 минут, что в принципе складывается около 3 - 5 км от нужной точки, что не совсем для меня приемлемо. В целом задача такая: по полученным снимкам со спутников находятся горячие точки и от них вычисляются угрозы до объектов (зона ответственности 5 км, так что приблизительно сообщение выдается когда от объекта до пожара максимум 6 км), вот необходимо по координате первой точки, азимуту и расстоянию найти координаты пожара. Вычислял так:

Код: Выделить всё

my $earth_radius = 6371000;
my @coord = ("62.3767 61.1151");
my  %hash = (
		'azimuth' => '-30.9744',
		'distance' => '2300'		
);
(my $phi_1, my $lyambda_1) = split(/ /, $coord[0]);
my $azimuth = $hash{azimuth};
my $distance = $hash{distance};

my $sigma = $distance/$earth_radius;

#tanslate to radian

$phi_1 = $phi_1*pi/180;
$lyambda_1 = $lyambda_1*pi/180;
$azimuth = $azimuth*pi/180;

#sphere to decart

my $angle_1 = pi/2-$sigma;
my $angle_2 = pi-$azimuth;
my $x = cos($angle_1)*cos($angle_2);
my $y = cos($angle_1)*sin($angle_2);
my $z = sin($angle_1);

#first rotate

my $rotate_angle_1 = $phi_1- pi/2;
my $x_ = -$z*sin($rotate_angle_1)+$x*cos($rotate_angle_1);
my $y_ = $y;
my $z_ = $z*cos($rotate_angle_1) + $x*sin($rotate_angle_1);

#second rotate

my $rotate_angle_2 = -$lyambda_1;
my $x__ = $x_*cos($rotate_angle_2)+$y_*sin($rotate_angle_2);
my $y__ = -$x_*sin($rotate_angle_2)+$y_*cos($rotate_angle_2);
my $z__ = $z_;

#calculate

my $phi_2 = atan2($z__, sqrt($x__**2 + $y__**2)); 
my $lyambda_2 = atan2($y__, $x__);

#translate to degrees

$phi_2 = $phi_2*180/pi;
$lyambda_2 = $lyambda_2*180/pi;
$phi_2 = sprintf('%.4f',$phi_2);
say $phi_2;
say $lyambda_2;
P.S. Отвечая на вопрос, почему бы не достать координаты из БД, т.к. они по любому там должны определятся, систему делал не я, мне нужно только допилить, и особого доступа к их скриптам не имею. Подскажите!

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя