- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
// Преобразовывает геокоординаты из одной СК в другую
//
// КоординатыТочки 			- Структура	- координаты
//
// ПараметрыПреобразования	- Структура - параметры преобразования из одной системы коорднат в другую
//
// ВысотаТочки 				- Число		- выстоа точки над уровнем моря
//
// Точность					- Число		- точность возвращаемых координат
//
// Возвращаемое значение:
//   Структура	- координаты
//
Функция ПреобразоватьКоординаты(КоординатыТочки, ПараметрыПреобразования, ВысотаТочки = 0, Точность = 6) Экспорт
	ПП = ПараметрыПреобразования;
	
	ШиротаВГрадусах 	= КоординатыТочки.Широта;
	ДолготаВГрадусах 	= КоординатыТочки.Долгота; 
	
	ЧислоПи = 3.14159265358979;
	ЧислоУгловыхСекундВРадиане = 206264.8062;
	
	КвадратЭксцентриситетаИсходногоЭллипсоида 	= 2 * ПП.СжатиеИсходногоЭллипсоида - Pow(ПП.СжатиеИсходногоЭллипсоида , 2);
	КвадратЭксцентриситетаКонечногоЭллипсоида 	= 2 * ПП.СжатиеКонечногоЭллипсоида - Pow(ПП.СжатиеКонечногоЭллипсоида , 2);
	
	СреднееБольшаяПолуось 				= (ПП.БольшаяПолуосьИсходногоЭллипсоида + ПП.БольшаяПолуосьКонечногоЭллипсоида) / 2;
	СреднееКвадратЭксцентриситета 		= (КвадратЭксцентриситетаИсходногоЭллипсоида + КвадратЭксцентриситетаКонечногоЭллипсоида) / 2;
	РазностьБольшихПолуосей 			= ПП.БольшаяПолуосьКонечногоЭллипсоида - ПП.БольшаяПолуосьИсходногоЭллипсоида;
	РазностьКвадратовЭксцентриситетов 	= КвадратЭксцентриситетаКонечногоЭллипсоида - КвадратЭксцентриситетаИсходногоЭллипсоида;
	
	ШиротаВРадианах 	= ШиротаВГрадусах * ЧислоПи / 180;
	ДолготаВРадианах 	= ДолготаВГрадусах * ЧислоПи / 180;
	РадиусКривизныМеридианногоСечения 	= СреднееБольшаяПолуось * (1 - СреднееКвадратЭксцентриситета) 
	/ Pow(1 - СреднееКвадратЭксцентриситета * Pow(Sin(ШиротаВРадианах) , 2) , 1.5);
	РадиусКривизныПервогоВертикала 		= СреднееБольшаяПолуось * Pow(1 - СреднееКвадратЭксцентриситета 
	* Pow(Sin(ШиротаВРадианах) , 2) , -0.5);
	СмещениеШиротыВСекундах 	= ЧислоУгловыхСекундВРадиане / (РадиусКривизныМеридианногоСечения + ВысотаТочки) 
	* (РадиусКривизныПервогоВертикала / СреднееБольшаяПолуось * СреднееКвадратЭксцентриситета * Sin(ШиротаВРадианах) 
	* Cos(ШиротаВРадианах) * РазностьБольшихПолуосей + (Pow(РадиусКривизныПервогоВертикала , 2) / Pow(СреднееБольшаяПолуось , 2) + 1) 
	* РадиусКривизныПервогоВертикала * Sin(ШиротаВРадианах) * Cos(ШиротаВРадианах) * РазностьКвадратовЭксцентриситетов / 2 
	- (ПП.ЛинейноеСмещениеОсьАбсцисс * Cos(ДолготаВРадианах) + ПП.ЛинейноеСмещениеОсьОрдинат * Sin(ДолготаВРадианах)) 
	* Sin(ШиротаВРадианах) + ПП.ЛинейноеСмещениеОсьАппликат * Cos(ШиротаВРадианах)) 
	- ПП.УгловоеСмещениеОсьАбсцисс * Sin(ДолготаВРадианах) * (1 + СреднееКвадратЭксцентриситета * Cos(2 * ШиротаВРадианах)) 
	+ ПП.УгловоеСмещениеОсьОрдинат * Cos(ДолготаВРадианах) * (1 + СреднееКвадратЭксцентриситета * Cos(2 * ШиротаВРадианах)) 
	- ЧислоУгловыхСекундВРадиане * ПП.ДифференциальноеРазличиеМасштабов * СреднееКвадратЭксцентриситета * Sin(ШиротаВРадианах) 
	* Cos(ШиротаВРадианах);
	
	СмещениеДолготыВСекундах 	= ЧислоУгловыхСекундВРадиане / ((РадиусКривизныПервогоВертикала + ВысотаТочки) 
	* Cos(ШиротаВРадианах)) * (-ПП.ЛинейноеСмещениеОсьАбсцисс * Sin(ДолготаВРадианах) 
	+ ПП.ЛинейноеСмещениеОсьОрдинат * Cos(ДолготаВРадианах)) + Tan(ШиротаВРадианах) * (1 - СреднееКвадратЭксцентриситета) 
	* (ПП.УгловоеСмещениеОсьАбсцисс * Cos(ДолготаВРадианах) + ПП.УгловоеСмещениеОсьОрдинат * Sin(ДолготаВРадианах)) 
	- ПП.УгловоеСмещениеОсьАппликат;
	СмещениеВысоты 				= -СреднееБольшаяПолуось / РадиусКривизныПервогоВертикала * РазностьБольшихПолуосей 
	+ РадиусКривизныПервогоВертикала * Pow(Sin(ШиротаВРадианах) , 2) * РазностьКвадратовЭксцентриситетов / 2 
	+ (ПП.ЛинейноеСмещениеОсьАбсцисс * Cos(ДолготаВРадианах) + ПП.ЛинейноеСмещениеОсьОрдинат * Sin(ДолготаВРадианах)) 
	* Cos(ШиротаВРадианах) + ПП.ЛинейноеСмещениеОсьАппликат * Sin(ШиротаВРадианах) 
	- РадиусКривизныПервогоВертикала * СреднееКвадратЭксцентриситета * Sin(ШиротаВРадианах) * Cos(ШиротаВРадианах) 
	* (ПП.УгловоеСмещениеОсьАбсцисс / ЧислоУгловыхСекундВРадиане * Sin(ДолготаВРадианах) 
	- ПП.УгловоеСмещениеОсьОрдинат / ЧислоУгловыхСекундВРадиане * Cos(ДолготаВРадианах)) 
	+ (Pow(СреднееБольшаяПолуось , 2) / РадиусКривизныПервогоВертикала + ВысотаТочки) * ПП.ДифференциальноеРазличиеМасштабов;
	
	Возврат Новый Структура("Широта,Долгота,Высота", Окр(ШиротаВГрадусах + СмещениеШиротыВСекундах / 3600, Точность), Окр(ДолготаВГрадусах + СмещениеДолготыВСекундах / 3600, Точность), Окр(ВысотаТочки + СмещениеВысоты,3));
	
КонецФункции