Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > помогите перевести с VisualBasic в Delphi |
Автор: VirtualHouse 19.8.2005, 23:04 |
Это умная програмка перевода с координат системы GPS в наши метровые координаты. Очень полезная вещь. Только написана она не на делфи. 1 Функции рабочей книги для преобразования 1 геодезических координат из координатной системы Пулково 1942 ' в координатную систему WGS84 ' Все угловые значения передаются и возвращаются в градусах, ' высоты передаются и возвращаются в метрах 1 Сделано на основании ГОСТ Р 51794-2001 Российской Федерации Const Pi As Double = 3.14159265358979 ' Число, Пи Const ro As Double = 206264.8062 ' Число угловых секунд в радиане 1 Эллипсоид Красовского (Пулково 1942) Const aP As Double = 6378245 ' Большая полуось Const alP As Double = 1 / 298.3 ' Сжатие Const e2P As Double = 2 * alP - alP A 2 ' Квадрат эксцентриситета 1 Эллипсоид GRS80 (WGS84) Const aW As Double = 6378137 ' Большая полуось Const alW As Double = 1 / 298.257223563 ' Сжатие Const e2W As Double = 2 * alW - alW x 2 ' Квадрат эксцентриситета 1 Вспомогательные значения для преобразования эллипсоидов Const a As Double = (aP + aW) /2 Const e2 As Double = (e2P + e2W) / 2 Const da As Double = aW - aP Const de2 As Double = e2W - e2P 1 Линейные элементы трансформирования, в метрах Const dx As Double =23.92 Const dy As Double = -141.27 Const dz As Double = -80.9 1 Угловые элементы трансформирования, в секундах Const wx As Double = 0 Const wy As Double = 0 Const wz AS Double = 0 ' Дифференциальное различие масштабов Const ms As Double = 0 Function WGS84_SK42_Lat(Bd, Ld, H As Double) As Double WGS84_SK42_Lat = Bd - dB(Bd, Ld, H) / 3600 End Function Function SK42_WGS84_Lat(Bd, Ld, H As Double) As Double SK42__WGS84__Lat = Bd + dB(Bd, Ld, H) / 3600 End Function Function WGS84_SK42__Long(Bd, Ld, H As Double) As Double WGS84_SK42__Long = Ld - dL(Bd, Ld, H) / 3600 End Function Function SK42_WGS84_Long(Bd, Ld, H As Double) As Double SK42_WGS84_Long = Ld + dL(Bd, Ld, H) / 3600 End Function Function dB(Bd, Ld, H As Double) As Double Dim B, L, M, N- As Double В = Bd * Pi / 180 L * Ld * Pi / 180 M = a * (1 - e2) / (1 - e2 * Sin(B) A 2) A 1.5 N = a * (1 - e2 * Sin(B) A 2) л -0.5 dB = ro / (M + H) * (N / a * e2 * Sin(B) * Cos(B) * da _ + (NA2/aA2+l) *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 * ms * e2 * Sin(B) * Cos(B) End Function Function dL(Bd, Lid, H As Double) As Double Dim B, L, N As Double В = Bd * Pi / 180 L = Ld * Pi / 180 N = a * (1 - e2 * Sin(B) л 2) A -0.5 dL = ro / ((N + H) * Cos(B)) * (-dx * Sin(L) + dy * Cos(L)) + Tan(B) * (1 - e2) * (wx * Cos(L) + wy * Sin(L)) - wz End Function Function WGS84Alt(Bd, Ld, H As Double) As Double Dim B, L, N, dH As Double В = Bd * Pi / 180 L = Ld * Pi / 180 N = a * (1 - e2 * Sin(B) A 2) x -0.5 dH = -a / N * da + N * Sin(B) A 2 * de2 / 2 + (dx * Cos(L) + dy * Sin(L)) * Cos(B) + dz * Sin(B) _ - N * e2 * Sin(B) * Cos(B) * (wx / ro * Sin(L) - wy / ro * Cos(L)) _ + (a A 2 / N + H) * ms WGS84Alt = H + dH End Function |
Автор: VirtualHouse 19.8.2005, 23:11 |
ПОПРАВОЧКА Вместо л и А ставится ^ это в квадрате просто фаин ридер плохо раскидал символы |
Автор: Fedor 20.8.2005, 00:04 |
Модератор: друзья! Если у вас назрел вопрос по Бэйсику или по Делфи или по этим обоим языкам вместе взятым, то зачем же постить вопрос в раздел Паскаля? В общем, перенесено из Паскаля в Центр помощи. |
Автор: VirtualHouse 20.8.2005, 03:39 |
Спасибо что пернесли туда куда надо. но мне надо решить этот вопрос. с переводом с системы измерения GPS в нашё метровую систему координат |
Автор: Mayk 20.8.2005, 08:31 | ||||||||||||
Ну и в чем собсно проблема? Инструкции вида
Заменяешь на
на
на
(или как там в пасе консты объявляются?) |
Автор: Pakshin A. S. 20.8.2005, 08:45 | ||
Верно.. так... |
Автор: VirtualHouse 20.8.2005, 11:37 |
Спасибо но он мне тут даёт ошибку В = Bd * Pi / 180 |
Автор: Fedor 20.8.2005, 11:55 | ||||
|
Автор: rsm 20.8.2005, 12:15 | ||
Вроде накатал нечто похожее на этот код. Только перед работой нужно будет вызвать процедуру InitVariables, т.к. Дельфи не понимает объявлений вида "da As Double = aW - aP" ни для констант, ни для переменных.
|
Автор: Alex 20.8.2005, 14:05 | ||||
Не нужно:
|
Автор: VirtualHouse 20.8.2005, 22:00 |
Спрасибо большое. Кстати эта нужная прога для всех кто пользуется GPS |