Формула пересчёта между зонами в Пулково 42 (+)

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Формула пересчёта между зонами в Пулково 42 (+)

Сообщение Boris » 15 мар 2010, 09:09

очень. и давно.
судя по числу параметров это полиномиальное преобразование, а не сдвиг осей начала координат. Это так?

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Формула пересчёта между зонами в Пулково 42 (+)

Сообщение JEY » 15 мар 2010, 10:16

Не обязательно. В программу заложены алгоритмы поиска параметров как 2D, так и 3D-преобразований. Результаты я проверял на основе статей G.A. Watson - Computing Helmert Transformations. Совпадение полное.

Этот проект имеет название KoordTrans3D. Исходный код написан на Java и его можно скачать вместе с исполняемым файлом.

Для ознакомления прошу сюда.

Shev
Новоприбывший
Сообщения: 1
Зарегистрирован: 15 мар 2010, 17:07
Репутация: 0

Re: Формула пересчёта между зонами в Пулково 42 (+)

Сообщение Shev » 15 мар 2010, 17:48

Здесь собственноручные утилиты на AutoLispе

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

RG 57.29577951308232
;;;------------------------------  (BL_xy 57.22559515555 -0.1296765916666)
;;;ГЕОДЕЗИЧЕСКИЕ -> ПРЯМОУГОЛЬНЫЕ  (strcat (rtos X_new)"  "(rtos Y_new))
;;;------------------------------  ответ  = "6345155.1106  -7833.1096" 
(defun BL_xy (B_old L_old / COS2_B Nx A0 A3 A4 A5 A6)
(setq B_old (/ B_old RG) L_old (/ L_old RG))  
(setq COS2_B (expt(cos B_old)2))
(setq Nx (- 6399698.9018(*(- 21562.267(*(- 108.973(* 0.612 COS2_B))COS2_B))COS2_B)))
(setq A0 (- 32140.404(*(- 135.3302(*(- 0.7092(* 0.0040 COS2_B))COS2_B))COS2_B)))
(setq A3 (- (*(+ 0.3333333(* 0.001123 COS2_B))COS2_B)0.1666667))
(setq A4 (- (*(+ 0.25(* 0.00252 COS2_B))COS2_B)0.04166))
(setq A5 (- 0.0083(*(- 0.1667(*(+ 0.1968(* 0.0040 COS2_B))COS2_B))COS2_B)))
(setq A6 (* (-(* 0.166 COS2_B)0.084)COS2_B))
(setq X_new (-(* 6367558.4969 B_old)(*(- A0 (*(+ 0.5(*(+ A4(* A6(expt L_old 2)))(expt L_old 2)))
	     (expt L_old 2)Nx))(sin B_old)(cos B_old))))
(setq Y_new (*(+ 1.0(*(+ A3(* A5(expt L_old 2)))(expt L_old 2))) L_old Nx (cos B_old)))
(setq Gamma_gp (*(+ 1.0(*(+ 0.33333 (* 0.00647 COS2_B) (* 0.2 (expt L_old 2) COS2_B)
	(- 0.0 (* 0.067(expt L_old 2)))) (expt L_old 2)COS2_B)) L_old (SIN B_old)RG)))

;;;------------------------------     (xy_BL 6345155.11 -7833.11)
;;;ПРЯМОУГОЛЬНЫЕ -> ГЕОДЕЗИЧЕСКИЕ     (strcat (Deg->Str B_new 5)" "(Deg->Str L_new 5))
;;;------------------------------      ответ = "057°13'32.14256 -000°07'46.83576" 
(defun xy_BL (x_old y_old / Bet COS2_Bet Bx COS2_Bx Nx Zet Zet2 B2 B3 B4 B5)
(setq Bet (/ x_old 6367558.4969)) 
(setq COS2_Bet (expt(cos Bet)2))
(setq Bx(+ Bet(*(+ 50221746.0 (*(+ 293622.0(*(+ 2350.0(* 22 COS2_Bet))COS2_Bet))COS2_Bet))
		0.0000000001  (sqrt(- COS2_Bet (expt COS2_Bet 2))))))
(setq COS2_Bx(expt(cos Bx)2))
(setq Nx (- 6399698.9018(* (- 21562.267(*(- 108.973(* 0.612 COS2_Bx))COS2_Bx))COS2_Bx)))
(setq Zet (/ y_old (* Nx(cos Bx))))
(setq Zet2 (expt Zet 2))
(setq B2 (*(+ 0.5(* 0.0033692 COS2_Bx))(sin Bx)(cos Bx)))
(setq B3 (- 0.333333(*(- 0.166667 (* 0.001123 COS2_Bx))COS2_Bx)))
(setq B4 (+ 0.25(* 0.16161 (expt(cos Bx)2))(* 0.00562 (expt(cos Bx)4))))
(setq B5 (- 0.2(*(- 0.1667(* 0.0088 COS2_Bx)) COS2_Bx)))
(setq B_new (- (RAD->DEG Bx)(*(- 1.0(*(- B4(* 0.12 Zet2))Zet2))Zet2 B2 RG)))
(setq L_new (*(- 1.0(*(- B3(* B5 Zet2))Zet2)) Zet RG))
(setq Gamma_pg (*(*(- 1.0 (*(- 0.33333 (* 0.00225 COS2_Bx COS2_Bx)
	    (* (- 0.2(* 0.067 COS2_Bx))Zet2))Zet2)) Zet (sin Bx))RG)))
При пересчете следует учитывать (отбрасывать) номер зоны и сдвиг осевого меридиана 500000 для 6-тиградусных зон или 250000 для 3-хградусных. Номер зоны 11 - это примерно Сибирь в 6-градусной зоне, или Европейская территория в 3-хградусной зоне прямоугольных координат.

Andrey1
Активный участник
Сообщения: 209
Зарегистрирован: 13 июл 2007, 18:58
Репутация: 1

Re: Формула пересчёта между зонами в Пулково 42 (+)

Сообщение Andrey1 » 16 мар 2010, 22:39

Jey:

Интересует программа, а ещё больше интересует её листинг :-)

Нескромно, да? :-)

Shev:

Я такое писал для эллипсоида с задаваемыми пользователем параметрами. А не только именно для Красовского. В результате применяю для расчётов по WGS84, Бесселю и Кларку.

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Формула пересчёта между зонами в Пулково 42 (+)

Сообщение JEY » 17 мар 2010, 07:48

Ну почему же? Очень даже скромно! Листинг внутри архива. Если Вы основательно исследуете содержимое файла с расширением *.jar (который у меня легко открывается даже в Total Commander), то сразу же найдете все, что Вам нужно!

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Репутация: 1

Re: Формула пересчёта между зонами в Пулково 42 (+)

Сообщение JEY » 17 мар 2010, 07:52

Очень было любезно с Вашей стороны опубликовать листинг на AutoLisp. Я бы посоветовал Вам (на будущее) крепить такие данные в виде файлов к сообщению. Очень практично. Прочитавший сможет легко найти ему применение.

Ответить

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

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

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