Страница 1 из 3

Нахождение параметров преобразования между разными СК

Добавлено: 19 янв 2008, 23:44
Andrey1
Hi all!

Передо мной стоит задача нахождения параметров 7-параметрического преобразования (DX,DY,DZ,WX,WY,WZ,m) между теми или иными двумя системами геодезических координат. Исходные данные для вывода этих параметров - геодезические координаты (B,L,H) нескольких точек в первой и второй СК.

Общие принципы вывода мне известны, но меня интересует либо чёткий алгоритм, либо ссылка на какой-либо геодезический калькулятор, с помощью которого можно найти эти параметры.

Спасибо!!!

Добавлено: 20 янв 2008, 22:47
Andrey1
Нет настроения тратить силы и время, "причёсывать" формулы и писать программу (которая нужна раз в жизни). Если есть готовый геокалькулятор (не Транскор), решающий такую задачу - прекрасно.

Хорошо бы найти геокалькулятор, с помощью которого проводится расчёт координат МСК из координат глобальной СК.

Добавлено: 20 янв 2008, 22:53
kitos
МСК - это....? местная?
формулы нужны когда нет "нормальной" ГИС, которая бы переводила свои карты в географические координаты. поэтому есть, наверное, смысл делать библиотеки по пересчету... может они уже есть где-то? кто-то видел?

Добавлено: 21 янв 2008, 19:39
Andrey1
1. По поводу Tatuk Gis Calculator. С одной стороны, вшито много проекций, но точность отвратительная - 0,1". Так как на практике я пользуюсь проекцией Гаусса-Крюгера (k=1) и только, теоретически возможно ещё использование UTM (k=0.9996), то мне главное - точность пересчёта. Поэтому для точных расчётов пользоваться сей софтиной не рекомендую. Она может пригодиться при работе с координатами "картографической" точности в не самых крупных масштабах карт (1:50 000 и мельче).

2. МСК - местная система координат. Сами формулы есть, но: а) а вдруг опечатки? б) надо довольно долго программу писать.

3. Также стараюсь не писать программу, если уже где-то такая есть, по нахождению параметров перехода между геоцентрическими (геодезическими) координатами. Если в работе используется ряд опорных точек, для которых имеются координаты в различных СК, то стоит задача пересчитать (не аффинкой) в другую СК координаты всех остальных точек, для чего требуются найденные параметры 7-параметрического преобразования.

Добавлено: 22 янв 2008, 10:54
kitos
большое спасибо за калькулятор :)
могли бы вы еще пояснить букву "k", которую вы говорили постом раньше про проекции? что она означает?

Добавлено: 22 янв 2008, 20:35
Andrey1
Какой калькулятор???

k - масштабный коэффициент на центральном меридиане зоны.

Добавлено: 23 янв 2008, 10:34
kitos
за кальклятор - который TatukGIS Calculatоr)
про масштабный коэффициент уже нашел что искал)
вы могли бы еще посоветовать какое-то средство точного нахождения спроецированных координат по географическим? MapInfo хорошую точность к примеру дает?
вот еще одну программульку нашел:
http://softsearch.ru/programs/118-270-c ... load.shtml

Добавлено: 23 янв 2008, 16:18
Andrey1
Пусть наша точка имеет геодезические координаты на эллипсоиде Красовского
(двуосном, 1940г., a=6378245, 1/f = 1/298.3)

53° с.ш. / 52° в.д. (значения взяты абсолютно произвольно),

и мы находим плоские прямоугольные координаты в проекции Гаусса-Крюгера.

При преобразовании с использованием 3-членного ряда получаем, округляя до 0,1 мм

x = 5875191,4108 м
y = 9567137,4061 м

При преобразовании с использованием 4-членного ряда получаем, округляя до 0,1 мм

x = 5875191,4091 м
y = 9567137,4061 м

При использовании программы Сучковой Т.М. ccoord.exe получаем значения:

x = 5875191
y = _567151

Что можно сказать, если ошибка по Y составляет 14 метров???

Почему точность вывода ограничена одним метром???

Автор честно предупреждает, что расчёт ведётся для использования с картами-стометровками и более мелкого масштаба (предельная картографическая точность 0,1 мм * 100 м даёт необходимую точность расчёта координат как раз 1 метр).

Возможно, использовались алгоритмы низкой точности. К сожалению, нет работы ни с какими файлами, есть недоработки интерфейса, связанные с зонами.

Увы.

Добавлено: 29 янв 2008, 17:10
kitos
большое спасибо за ответ. очень помогло. но у меня еще есть вопрос. откуда у вас взялась первая девятка у Y? я отладил свой алгоритм, но у меня получаются цыфры:
x 5875191.414157
y 567137.406074

Добавлено: 29 янв 2008, 17:23
Andrey1
Так девятка - номер зоны, указывает на то, что центральный меридиан этой зоны имеет долготу 51°.

Я думаю, что в копилку самодельного софта в будущем можно выложить творения после тестирования.

Почему китосовый x на 4 миллиметра больше???

Я внедрил 3-членный ряд и 4-членный ряд - их результаты чуть-чуть отличаются (в пределах 1-3 мм), но 3-членное преобразование (по формулам из "Справочника геодезиста") применяется в подавляющем большинстве профессиональных геодезических калькуляторов, хотя оно и менее точное (декларируется ~1 мм, сходимость в пределах 0,1-0,2 мм), и его использование позволяет получать точно такие же результаты. 4-членное преобразование применяется только в Транскоре (точность - несколько десятков микрон, сходимость в пределах 20 микрон).

Добавлено: 29 янв 2008, 17:29
kitos
и еще вопрос. насчет формулы длины души меридиана, которая нужна для этого преобразования.
посмотрел в книге Бугаевского, там приведена такая:
n = (a-b)/(a+b)
Sm = a*( (1 + n*n/4 + Power(n,4)/64)*lat
- ( n*3/2 - Power(n,3)*3/16)*sin(2*lat) +
+ (15*n*n/16 - Power(n,4)*15/64)*sin(4*lat) -
- ( n*n*n*35/42)*sin(lat*6) )/(1 + n)
- не работает(. работает формула из описания к lbproj ( http://members.bellatlantic.net/~vze2hc ... manual.pdf , стр 24) , но в ней я не уверен на все 100%. чисто из-за источника и, может быть, зря.
можете сказать, какая у вас или порекомендовать какой-то источник?

Добавлено: 29 янв 2008, 17:36
Andrey1
>>насчет формулы длины души меридиана

:-)

Короче.

FUNCTION GetS(B:double;VED:TEllDone):double;//ok
//Вычисление длины дуги на эллипсоиде от точки с заданной широтой до экватора
//B - геодезическая широта, a,f -параметры эллипсоида
//Если точка южнее экватора (B<0), то S<0
var
n1,n2,n3,n4:double;
//B - в радианах
begin
n1:=(VED.aell-VED.bell)/(VED.aell+VED.bell);
n2:=n1*n1;
n3:=n2*n1;
n4:=n3*n1;
GetS:=VED.aell/(1+n1)*((1+n2/4+n4/64)*B-(1.5*n1-3/16*n3)*sin(2*B)+
(15/16*n2-15/64*n4)*sin(4*B)-(35/43*n3)*sin(6*B));
end;

В 4-членном алгоритме более усечённый вариант

R:=f/(2-f);
R2:=R*R;
R3:=R2*R;
R4:=R2*R2;
c:=VED.aell*(1+R2/4+R4/64)/(1+R);

Но, как ни странно, результат расчёта длины такой же.

Добавлено: 30 янв 2008, 13:50
kitos
мнда... оказалось, синтаксис неправильный написал. :oops:
Andrey1 писал(а):
Я думаю, что в копилку самодельного софта в будущем можно выложить творения после тестирования.
это вы про чьи творениЯ? о_О

Добавлено: 30 янв 2008, 19:33
Andrey1
Свои или твои, если, конечно, администрация сайта поддержит такое начинание.

Добавлено: 30 янв 2008, 21:15
kitos
в каком виде это делается? исходники? длл? .lib'ы?