![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
![]()
Может, был где-то такой вопрос, но я исшарил весь интернет, но не нашел ответа. Как же все таки программно преобразовать плоские прямоугольные координаты (X,Y в метрах) системы СК-42 в геодезические (широта, долгота в градусах)? Я нашел формулы ГОСТ-а, но почему-то результат неправильный, перепроверка правильно ли прописал нужные формулы тоже не дала эффекта. Я в тупике...
Вот мой код, основанный на формулах ГОСТ-а: procedure TForm1.MetToDeg(x,y ![]() ![]() var l: double; //расстояние от определяемой точки до осевого меридиана зоны, рад dB: double; //поправка к широте, рад B0: double; //геодезическая широта точки, абцисса которой равна абциссе х // определяемой точки, а ордината равна нулю, рад; n:longint; // целая часть числа; beta,z0 ![]() 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,lon ![]() begin MetToDeg(5273473.972,727949.177,lat ,lon); showmessage(floattostr(Lat)+' '+floattostr(Lon)); end; ![]() |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 08.12.2008
Сообщений: 156
|
![]()
ну вообще-то координаты в ск-42 это секретная информация (использовалась до шестдесят какого-то года, пока к нам на красную площадь не приземлился американец на самолете) и методы их преобразования в точные современные координы - военная тайна.
|
![]() |
![]() |
![]() |
#3 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
![]()
Нет, секретная система - это СК-63, для военных, а про СК-42 есть ГОСТ, где прописаны формулы преобразования, только у меня эти формулы не дали эффекта. Может, я где-то допустил ошибку в математических вычислениях в Delphi. Например, sin^2 числа я записывал как синус числа, потом возведенного в квадрат. Правильно ли так?
Или же у кого есть пример использования прцедуры преобразования? ![]() |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#5 |
Александр
Форумчанин
Регистрация: 15.08.2007
Сообщений: 112
|
![]()
Именно так я и делал... Хм... Значит, формулы ГОСТ-а лажовые какие-то... Ни у кого нет других?
Пара бессоных ночей, проведенных в нахождении ошибки не дал результата. Для меня вопрос до сих пор остается актуален. Неужели никто не сталкивался с преобразованием (в Delphi) прямоугольных координат в широту/долготу в градусах ? Очень буду признателен за конкретный пример. ![]() Последний раз редактировалось mihali4; 09.03.2009 в 14:34. Причина: Объединение постов |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 03.01.2009
Сообщений: 116
|
![]()
n:=floor(y*1000000); по ГОСТ должно быть скорее n:=trunc(y*0.000001);
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразование координат | 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 |