Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод географических координат в линейные, создание соответствующей программы 
:(
    Опции темы
seism
  Дата 23.8.2015, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.8.2015

Репутация: нет
Всего: нет



Доброго времени суток) Пишу программу для перевода географических координат в линейные., но координаты переводятся с ошибками, значения не совпадают с правильными. Может кто сталкивался с этим и подскажет, что там не верно? Вот код:

задаём географический центр и переводим его в начало координат:
$cfi=54*pi/180;
$cla=109*pi/180;
$GR=111.1111111* 180/pi; #km
$cosdd0=sin($cfi)*sin($cfi)+cos($cfi)*cos($cfi)*cos($cla-$cla);
if ($cosdd0>=1){
$dd0=0.000000000000000000000000000000000000000000000000001
}
elsif($cosdd0<=-1){
$dd0=pi
#$dd0=floor( ($earthRadius * pi * 100.0) / 100.0, 0)
}
else{
$dd0=acos($cosdd0)
}

$cosA=(sin($cfi)-sin($cfi)*cos($dd0))/(cos($cfi)*sin($dd0));
if ($cosA>=1){
$A=0
}
elsif($cosA<=-1){
$A=pi
}
else{
$A=acos($cosA)
}

$x0=$dd0*$GR*sin($A);
$y0=$dd0*$GR*cos($A);

переводим каждую точку в линейные координаты:
$cosdd0=(sin($cfi)*sin($fi*pi/180))+(cos($cfi)*cos($fi*pi/180)*cos($la*pi/180-$cla));
if ($cosdd0>=1){
$dd0=0.000000000000000000000000000000000000000000000000001
}
elsif($cosdd0<=-1){
#$dd0=floor( ($earthRadius * pi * 100.0) / 100.0, 0)
$dd0=pi
}
else{
$dd0=acos($cosdd0)
}

if($dd0==0.000000000000000000000000000000000000000000000000001){
$sindd0=0.0000000000000000000000000000000000000000000000000001
}
else{
$sindd0=sin($dd0)
}
$a1=sin($fi*pi/180)-sin($cfi)*$cosdd0;
$a2=cos($cfi)*$sindd0;
$cosA=$a1/$a2;

#$cosA=(sin($fi*pi/180)-sin($cfi*pi/180)*cos($dd0))/(cos($cfi*pi/180)*sin($dd0));
if ($cosA>=1){
$A=0
}
elsif($cosA<=-1){
$A=pi
}
else{
$A=acos($cosA)
}

#if (sin ($la - $cla) < 0)
if($la*pi/180<$cla)
{
$A = 2*pi - $A;
}

$x=$dd0*$GR*sin($A);
$y=$dd0*$GR*cos($A);
$ll2=sqrt(($x-$x0)*($x-$x0)+($y-$y0)*($y-$y0));
$x0=$x;
$y0=$y;

Вот источник формул: h
https://vk.com/id44806635?z=photo44806635_3.../photos44806635
https://vk.com/id44806635?z=photo44806635_3.../photos44806635
Предполагаю, что ошибка где-то в тригонометрических функциях. 
Если Вы посмотрели программу и считаете,  что там всё верно, пожалуйста, про это тоже пишите.
Заранее спасибо. 
PM MAIL   Вверх
tzirechnoy
Дата 24.8.2015, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Возможно, кто-то с логином вконтактике меня поправит, но кажэтся это бездарный пиар то ли паблика то ли бота в этой соц.сети.

Во всяком случае, зайдя со своего браузера -- я там увидел личную страничку какой-то жэнщины, какие-то перепосты смешных картинок с чего-то вроде адми и никаких формул.

PS Да, формулы в посте явно написаны под действием какого-то упорина, поскольку безсмысленны чуть менее чем полностью.
PM MAIL   Вверх
seism
Дата 29.8.2015, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 23.8.2015

Репутация: нет
Всего: нет



Вот формулы:
Fi0, la0 – координаты точки, в которую поместили начало отсчёта (54 и 109 градусов соответственно), fi, la – текущая широта и долгота. Эти точки переводим в радианы.
1.    Между этими точками в радианах:
d=arccos(sin(fi0)*sin(fi)+cos(fi0)*cos(fi)*cos(la-la0))
2.    Находим угол между направлением на север и направлением от начала координат на текущую точку:
A=arcos(( sin(fi)-sin(fi0)*cos(d))/(cos(fi0)*cos(d)))
3.     K=111.1111111*180/pi
4.    Вычисляем x и y в километрах:
X=d*K*sin(A)  y=d*K*cos(A)

Взяты в сборнике "Исследования по поискам предвестников землетрясений в Сибири". Только там для градусов, а perl с радианами работает.
В программе коэффициент K называется GR. 
В прикреплённом файле формулы  (страница из сборника)

Это сообщение отредактировал(а) seism - 29.8.2015, 11:14

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  88.jpg 50,25 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0621 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.