Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2009, 11:31   #1
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию Преобразование координат системы СК-42

Может, был где-то такой вопрос, но я исшарил весь интернет, но не нашел ответа. Как же все таки программно преобразовать плоские прямоугольные координаты (X,Y в метрах) системы СК-42 в геодезические (широта, долгота в градусах)? Я нашел формулы ГОСТ-а, но почему-то результат неправильный, перепроверка правильно ли прописал нужные формулы тоже не дала эффекта. Я в тупике...

Вот мой код, основанный на формулах ГОСТ-а:

procedure TForm1.MetToDeg(x,youble; var Lat,Lonouble);
var
l: double; //расстояние от определяемой точки до осевого меридиана зоны, рад
dB: double; //поправка к широте, рад
B0: double; //геодезическая широта точки, абцисса которой равна абциссе х
// определяемой точки, а ордината равна нулю, рад;
n:longint; // целая часть числа;
beta,z0ouble; // вспомогательные величины
begin
beta:=x/6367558.4968;
B0:=(beta+sin(2*beta)*(0.0025258868 5-0.00001491860*sqr(sin(beta))+0.0000 0011904*power(sin(beta),4)));
n:=floor(y*1000000);
z0:=(y-(10*n+5)*power(10,5))/6378245*cos(B0);
dB:=sqr(-z0)*sqr(sin(B0))*(0.251684631-0.003369263*sqr(sin(B0))+0.00001127 6
*power(sin(B0),4)-sqr(z0)*(0.10500614-0.04559916*sqr(sin(B0))+0.00228901
*power(sin(B0),4)-0.00002987*power(sin(B0),6)-sqr(z0)*(0.042858-0.025318
*sqr(sin(B0))+0.014346*power(sin(B0 ),4)-0.001264*power(sin(B0),6)-sqr(z0)
*(0.01672-0.00630*sqr(sin(B0))+0.01188*power( sin(B0),4)-0.00328*power(sin(B0),6)))));
l:=z0*(1-0.0033467108*sqr(sin(B0))-0.0000056002*power(sin(B0),4)-0.0000000187
*power(sin(B0),6)-sqr(z0)*(0.16778975+0.16273586*sqr( sin(B0))-0.00052490
*power(sin(B0),4)-0.00000846*power(sin(B0),6)-sqr(z0)*(0.0420025+0.1487407
*sqr(sin(B0))+0.0059420*power(sin(B 0),4)-0.0000150*power(sin(B0),6)-sqr(z0)
*(0.01225+0.09477*sqr(sin(B0))+0.03 282*power(sin(B0),4)-0.00034*power(sin(B0),6)
-sqr(z0)*(0.0038+0.0524*sqr(sin(B0)) +0.0482*power(sin(B0),4)+0.0032*pow er(sin(B0),6))))));
Lat:=B0+dB; Lon:=radtodeg(6*(n-0.5)/57.29577951+l);
end;


procedure TForm1.Button2Click(Sender: TObject);
var lat,lonouble;
begin
MetToDeg(5273473.972,727949.177,lat ,lon);
showmessage(floattostr(Lat)+' '+floattostr(Lon));
end;
Македонский вне форума Ответить с цитированием
Старый 06.03.2009, 11:45   #2
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

ну вообще-то координаты в ск-42 это секретная информация (использовалась до шестдесят какого-то года, пока к нам на красную площадь не приземлился американец на самолете) и методы их преобразования в точные современные координы - военная тайна.
Bayazet вне форума Ответить с цитированием
Старый 06.03.2009, 12:39   #3
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Нет, секретная система - это СК-63, для военных, а про СК-42 есть ГОСТ, где прописаны формулы преобразования, только у меня эти формулы не дали эффекта. Может, я где-то допустил ошибку в математических вычислениях в Delphi. Например, sin^2 числа я записывал как синус числа, потом возведенного в квадрат. Правильно ли так?
Или же у кого есть пример использования прцедуры преобразования?
Македонский вне форума Ответить с цитированием
Старый 06.03.2009, 13:57   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
sin^2
пиши так
Код:
sqr(sin(x))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.03.2009, 18:34   #5
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Именно так я и делал... Хм... Значит, формулы ГОСТ-а лажовые какие-то... Ни у кого нет других?

Пара бессоных ночей, проведенных в нахождении ошибки не дал результата. Для меня вопрос до сих пор остается актуален. Неужели никто не сталкивался с преобразованием (в Delphi) прямоугольных координат в широту/долготу в градусах ?
Очень буду признателен за конкретный пример.

Последний раз редактировалось mihali4; 09.03.2009 в 14:34. Причина: Объединение постов
Македонский вне форума Ответить с цитированием
Старый 09.03.2009, 14:15   #6
Антон Ю.Б.
Форумчанин
 
Регистрация: 03.01.2009
Сообщений: 116
По умолчанию

n:=floor(y*1000000); по ГОСТ должно быть скорее n:=trunc(y*0.000001);
Антон Ю.Б. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование координат HunterMan Общие вопросы .NET 1 22.12.2008 15:03
квадрат и система координат=) kolduev Помощь студентам 8 11.03.2008 19:11
Определить длину отрезка во 2-м квадранте системы координат kolduev Помощь студентам 9 13.02.2008 17:45
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42