Перевод из СК-42 в Гаусса-Крюгера

Системы координат, проекции, преобразования, привязка
Ответить
Кот Баюн
Новоприбывший
Сообщения: 1
Зарегистрирован: 26 сен 2013, 22:03
Репутация: 0

Перевод из СК-42 в Гаусса-Крюгера

Сообщение Кот Баюн » 26 сен 2013, 22:52

Приветствую!
У меня такой вопрос: вот в ГОСТ Р 51794-2008 есть формулы для пересчета геодезических координат ск-42 в прямоугольные гаусса-крюгера.
10.gif
10.gif (46.21 КБ) 9853 просмотра
Значит, возьмем для примеры координаты Москвы: B = 55 45' 6''; L = 37 37' 4''

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

from math import sin, cos

def transformB2X(B, L, H, nz):
	l = (L - (3 + 6 * (nz - 1))) / 57.29577951; 
	x = 6367558.4968 * B - sin(2*B)*(16002.8900 + 66.9607 * sin(B)**2 + 0.3515 * sin(B)**4 - 
		l**2*(1594561.25 + 5336.535 * sin(B)**2 + 26.790 * sin(B)**4 + 0.149 * sin(B)**6) + 
		l**2*(672483.4 - 811219.9 * sin(B)**2 + 5420.0 * sin(B)**4 - 10.6 * sin(B)**6 + 
		l**2*(278194.0 - 830174.0 * sin(B)**2 + 572434.0 * sin(B)**4 - 16010.0 * sin(B)**6 + 
		l**2*(109500.0 - 574700.0 * sin(B)**2 + 863700.0 * sin(B)**4 - 398600.0 * sin(B)**6))))
	print x

def transformL2Y(B, L, H, nz):
	l = (L - (3 + 6 * (nz - 1))) / 57.29577951; 
	y =  (5 + 10 * nz) * 100000.0 + l * cos(B) * (6378245.0 + 21346.1415 * sin(B)**2 + 107.1590 * sin(B)**4 + 0.5977 * sin(B)**6 +
		l**2*(1070204.16 - 2136826.66 * sin(B)**2 + 17.98 * sin(B)**4 - 11.99 * sin(B)**6 +
		l**2*(270806.0 - 1523417.0 * sin(B)**2 + 1327645.0 * sin(B)**4 - 21701.0 * sin(B)**6 +
		l**2*(79690.0 - 86610.0 * sin(B)**2 + 1730360.0 * sin(B)**4 - 945460.0 * sin(B)**6))));
	print y

transformB2X(0.973050, 0.656554, 2, 7)
transformL2Y(0.973050, 0.656554, 2, 7)
(0.973050, 0.656554 - потому что в радианы перевел)
По этим формулам получается:
x 6802281.70619
y 5152096.83376


Ответ неправильный. Что я делаю не так?

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2240
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1513
Откуда: Казань

Re: Перевод из СК-42 в Гаусса-Крюгера

Сообщение Игорь Белов » 27 сен 2013, 16:42

Формула l = ... подразумевает ввод долготы L в градусах. Если вводите в радианах, поправьте формулу:

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

l = L - (3 + 6 * (nz - 1)) / 57.29577951
The purpose of computing is insight, not numbers

berq22
Новоприбывший
Сообщения: 1
Зарегистрирован: 02 сен 2015, 12:53
Репутация: 0

Re: Перевод из СК-42 в Гаусса-Крюгера

Сообщение berq22 » 02 сен 2015, 12:55

def transformB2X(B, L, H, nz):
l = (L - (3 + 6 * (nz - 1))) / 57.29577951;
x = 6367558.4968 * B - sin(2*B)*(16002.8900 + 66.9607 * sin(B)**2 + 0.3515 * sin(B)**4 -
l**2*(1594561.25 + 5336.535 * sin(B)**2 + 26.790 * sin(B)**4 + 0.149 * sin(B)**6) +
l**2*(672483.4 - 811219.9 * sin(B)**2 + 5420.0 * sin(B)**4 - 10.6 * sin(B)**6 +
l**2*(278194.0 - 830174.0 * sin(B)**2 + 572434.0 * sin(B)**4 - 16010.0 * sin(B)**6 +
l**2*(109500.0 - 574700.0 * sin(B)**2 + 863700.0 * sin(B)**4 - 398600.0 * sin(B)**6))))
print x

Скобка стоит неправильно.
Удалить, перенести в конец формулы

Верный вариант:

def transformB2X(B, L, H, nz):
l = (L - (3 + 6 * (nz - 1))) / 57.29577951;
x = 6367558.4968 * B - sin(2*B)*(16002.8900 + 66.9607 * sin(B)**2 + 0.3515 * sin(B)**4 -
l**2*(1594561.25 + 5336.535 * sin(B)**2 + 26.790 * sin(B)**4 + 0.149 * sin(B)**6 +
l**2*(672483.4 - 811219.9 * sin(B)**2 + 5420.0 * sin(B)**4 - 10.6 * sin(B)**6 +
l**2*(278194.0 - 830174.0 * sin(B)**2 + 572434.0 * sin(B)**4 - 16010.0 * sin(B)**6 +
l**2*(109500.0 - 574700.0 * sin(B)**2 + 863700.0 * sin(B)**4 - 398600.0 * sin(B)**6)))))
print x

Ответить

Вернуться в «Координаты и привязка»

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

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