www.map-info.ru :: Просмотр темы - M64 ---> WGS84
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Владимир1001



Зарегистрирован: 31.08.2009
Сообщения: 3
Откуда: Питер

СообщениеДобавлено: Ср Фев 24, 2010 2:47 pm    Заголовок сообщения: M64 ---> WGS84 Добавить ответ со ссылкой на данный текст

Здравствуйте! Требуется консультация по проблеме сабжа. Существует ли непосредственно формула пересчета? Дело в том, что хочется это сделать, без участия внешних программ. Заранее спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arhara



Зарегистрирован: 18.02.2009
Сообщения: 400
Откуда: Moscow, RF

СообщениеДобавлено: Ср Фев 24, 2010 5:54 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

раз это раздел по программированию, то уточните, что именно вы хотите:
1. формулу
2. способ
3. способ с использованием MapBasic
---
ГОСТ не устраивает? там есть формула перехода от СК-42 (проекция Гаусса-Крюгера) к WGS84
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Владимир1001



Зарегистрирован: 31.08.2009
Сообщения: 3
Откуда: Питер

СообщениеДобавлено: Чт Фев 25, 2010 10:10 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Можно начать с формулы?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Владимир1001



Зарегистрирован: 31.08.2009
Сообщения: 3
Откуда: Питер

СообщениеДобавлено: Пн Мар 01, 2010 11:23 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Владимир1001 писал(а):
Можно начать с формулы?


Товарищи! Вопрос был сформулирован некорректно Smile

Как я понял последовательность такая: (если не так, поправьте меня):
СК64 -> СК42 -> WGS84, т.е прямой формулы из СК64 в WGS84 нет.

Тут лежит код на VB СК42 <-> WGS84
http://gis-lab.info/qa/wgs84-sk42-wgs84-formula.html

Я его перековал на на MB (только СК42 в WGS84):
Но упала точность. Там использовался тип Double здесь же Float. Оба
они 8 байтные.
1. Что делать с точность? Как повысить?
2. Где найти СК64 в СК42 наконец?...

include "mapbasic.def"
include "icons.def"
include "menu.def"

Declare Function dB(ByVal Bd as Float,ByVal Ld as Float,ByVal H as Float) As Float
Declare Function dL(ByVal Bd as Float,ByVal Ld as Float,ByVal H as Float) As Float
Declare Sub Main
Global Bd,Ld,B,L,N,M,Pi,ro,aP,alP,e2P,aW,alW,e2W,a,e2,da,de2,dx,dy,dz,wx,wy,wz,ms,in_x,in_y,in_z,res_x,res_y,res_z,tt as Float

Sub Main

Dialog
Title "Из СК42 в WGS84:"
Control StaticText
Title "X:"
Control EditText
into in_x

Control StaticText
Title "Y:"
Control EditText
into in_y

Control OkButton
Title "Пересчитать"
Control CancelButton
Title "Отмена"
if CommandInfo(CMD_INFO_DLG_OK) then

Pi= 3.14159265358979 ' Число Пи
ro= 206264.8062 ' Число угловых секунд в радиане


' Эллипсоид Красовского (Пулково 1942)
aP= 6378245 ' Большая полуось
alP= 1 / 298.3 ' Сжатие
e2P= 2 * alP - alP ^ 2 ' Квадрат эксцентриситета

' Эллипсоид GRS80 (WGS84)
aW= 6378137 ' Большая полуось
alW= 1 / 298.257223563 ' Сжатие
e2W= 2 * alW - alW ^ 2 ' Квадрат эксцентриситета

' Вспомогательные значения для преобразования эллипсоидов
a= (aP + aW) / 2
e2= (e2P + e2W) / 2
da= aW - aP
de2= e2W - e2P

' Линейные элементы трансформирования, в метрах
dx= 23.92
dy= -141.27
dz= -80.9
' Угловые элементы трансформирования, в секундах
wx= 0
wy= 0
wz= 0
' Дифференциальное различие масштабов
ms= 0

in_z=0

' -------------Из СК42 в WGS84----------
'
res_x =in_x+ dB(in_x,in_y,in_z) / 3600
'
res_y =in_y+ dL(in_x,in_y,in_z) / 3600

note "X:"+res_x+"; Y:"+res_y
end if
end sub 'main

Function dB(ByVal in_x,ByVal in_y,ByVal in_z as Float) As Float

B = in_x * Pi / 180
L = in_y * Pi / 180
M = a * (1 - e2) / (1 - e2 * Sin(B) ^ 2) ^ 1.5
N = a * (1 - e2 * Sin(B) ^ 2) ^ -0.5
tt = ro / (M + in_z) * (N / a * e2 * Sin(B) * Cos(B) * da + (N ^ 2 / a ^ 2 + 1) * N * Sin(B) * Cos(B) * de2 / 2
-(dx * Cos(L) + dy * Sin(L)) * Sin(B) + dz * Cos(B)) - wx * Sin(L) * (1 + e2 * Cos(2 * B))+ wy * Cos(L)*(1+e2*Cos(2*B))-ro

dB=tt*ms * e2 * Sin(B) * Cos(B)

End Function


Function dL(ByVal in_x,ByVal in_y,ByVal in_z as Float) As Float

B = in_x * Pi / 180
L = in_y * Pi / 180
N = a * (1 - e2 * Sin(B) ^ 2) ^ -0.5

dL = ro / ((N + in_z) * Cos(B)) * (-dx * Sin(L) + dy * Cos(L))+ Tan(B) * (1 - e2) * (wx * Cos(L) + wy * Sin(L)) - wz
End Function
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Arhara



Зарегистрирован: 18.02.2009
Сообщения: 400
Откуда: Moscow, RF

СообщениеДобавлено: Ср Мар 03, 2010 2:35 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

прямая формула - есть. и она уже зашита в MapInfo. называется команда SaveAs.
Вы не найдете легальной формулы ни СК64 -> СК42, поскольку этот переход секретен.
Будете знать все параметры СК64 - забейте их в саму MapInfo и она вам пересчитает их из СК64 в WGS84.
Вопрос точности тема долгого разговора. И практически весь он есть там же откуда взяли формулу.
Переход СК64 -> СК42, если оба используют один и то же эллипсоид, можно считать миллиметровым.
Переход СК42 -> WGS84 уникален для каждой местности. Если нужны точности в дециметры - следует использовать специальный софт.
Кроме того у MapInfo есть предел точности, связанный с границами карты.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru