Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA-2002.doc
Скачиваний:
24
Добавлен:
06.12.2018
Размер:
1.09 Mб
Скачать

2. Разработка приложения “Прямая геодезическая задача”

На листе Excel разместить таблицу, содержащую 5 столбцов с именами: N-номер пункта, A-дирекц. угол (град.), d-гориз. Пролож. до след. пункта, X, Y -координаты. Ввести данные тестового примера (для 3-7 пунктов) в столбцы N,A,d, а для первого пункта - и в столбцы X,Y. Программа должна вычислять координаты X,Y остальных пунктов.

Рекомендации.

На листе Excel разместить переключатели (Option Buttons) с надписями (свойство Caption) Левые углы и Правые углы, а еще правее кнопку с надписью Вычислить. Кнопке должна соответствовать событийная процедура вычисления координат пунктов. Программу надо отладить на примерах, когда измерены левые и правые углы.

3. Разработка приложения “Обратная геодезическая задача”

Задача аналогична предыдущей (см. работу 2), только заданными являются столбцы N, X, Y, а вычислить надо дирекционные углы и горизонтальные проложения в столбцах A, d.

4. Разработка приложения “Преобразование географических координат в прямоугольные и прямоугольных в географические”

Э

Y-500

та курсовая работа особенно полезна для студентов, будующая специальность которых имеет отношение к наукам о Земле (геология, геодезия, экология, горное дело и т.п.). Но, вообще говоря, представлять системы координат, в которых строятся различные карты, должен каждый образованный человек. Известно, что в качестве геометрической модели Земли используют эллипсоид. В России обычно применяют параметры эллипсоида Красовского:

a = 6 378 245.000 м - большая полуось,

b = 6 356 863.019 м - малая (полярная) полуось,

e

X

12 = 0.006 693 4216 – квадрат первого эксцентриситета,

e22 = 0.006 719 2188 – квадрат второго эксцентриситета.

Для перехода к прямоугольным координатам эллипсоид (как дыню) разрезают от полюса к полюсу на шестиградусные зоны (дольки). Каждая зона-долька как-бы распрямляется – делается плоской. Координата X отсчитывается от экватора, а Y – от осевого меридиана зоны с добавлением 500 км. Эта добавка к координате Y служит для того, чтобы координаты Y были положительными. Таким образом, в каждой зоне свои координаты Y, отсчитываемые от своего осевого меридиана.

Каждая шестиградусная зона делится еще параллелями через 4 градуса, и получаются листы, для которых строятся карты масштаба 1:1000000 (в 1 см 10 км). Каждый лист миллионного масштаба делится на 36 листов масштаба 1:200000 или на 144 листа масштаба 1:100000 (в 1 см 1 км) – так строятся карты в прямоугольных координатах.

Обозначим широту точки через LT (Latitude – широта), а долготу – через LN (Longitude – долгота). С формулами для расчета X, Y по известным значениям LT, LN при заданном осевом (центральном) меридиане CM можно познакомиться по указанным в конце этой работы книгам. Вместо формул, здесь просто приведем начало модуля, содержащего общую процедуру LTLNtoXY, пересчитывающую географические координаты в прямоугольные, и опишем постановку остальных задач, которые надо запрограммировать, чтобы завершить разработку приложения.

Option Explicit

Const Pi180 As Double = 0.0174532925

Const A As Double = 6378245

Const B As Double = 6356863.019

Const EE1 As Double = 0.0066934216

Const EE2 As Double = 0.0067192188

Private Sub LTLNtoXY(LT As Double, LN As Double, X As Double, Y As Double, CM As Double)

' LT – ШИPOTA (радианы)

' LN – ДOЛГOTA (радианы)

' CM - ОСЕВОЙ MEPИДИAH (градусы)

' X, Y – KOOPДИHATЫ (км)

Dim N As Double, DL As Double, S As Double, DL2 As Double, T As Double, T2 As Double

Dim SINLT As Double, COSLT As Double, COS2 As Double, COS3 As Double, COS5 As Double

Dim A2 As Double, A4 As Double, B1 As Double, B3 As Double, B5 As Double, T4 As Double

DL = LN - CM * Pi180: DL2 = DL * DL

SINLT = Sin(LT): COSLT = Cos(LT): T = SINLT / COSLT

T2 = T * T: T4 = T2 * T2

COS2 = COSLT * COSLT: COS3 = COSLT * COSLT * COSLT: COS5 = COS2 * COS3

N = A / Sqr(1 - EE1 * SINLT * SINLT)

S = 6367558.49587 * LT - 16036.48027 * Sin(2 * LT) + _

16.828067 * Sin(4 * LT) - 0.021975 * Sin(6 * LT)

A2 = N * SINLT * COSLT / 2: A4 = N * SINLT * COS3 * (5 - T2) / 24

B1 = N * COSLT: B3 = N * COS3 * (1 - T2 + EE2 * COS2) / 6

B5 = N * COS5 * (5 - 18 * T2 + T4) / 120

X = ((A2 + A4 * DL2) * DL2 + S) * 0.001

Y = ((B3 + B5 * DL2) * DL2 + B1) * DL * 0.001 + 500

End Sub

Для построения приложения (назовем его Координаты.xls) на листе Excel в первой строке поместим названия столбцов таблицы: Номер точки, LT, LN, X, Y, Число итераций. Введем в ячейки второй и следующих строк номера нескольких точек и их географические координаты в градусах и поместим на лист Excel элементы управления, как показано ниже:

Номер т.

LT

LN

X

Y

Число итераций

1

60

105.75

6654.426

541.8501

5

( LT,LN)  ( X,Y)

2

55.12

107

6112.524

627.5992

5

Осевой меридиан

105

(X,Y)  (LT,LN)

Поясним элементы управления, событийные и общие процедуры. Поле с именем TextBox1 (имена элементов управления на листе Excel не показаны) предназначается для ввода значения осевого меридиана – в нашем примере 105о. Командные кнопки c именами BTN1 и BTN2 инициируют исполнение событийных процедур BTN1_Click и BTN2_Click. Первая из них из каждой непустой строки таблицы (начиная со строки 2) извлекает географические координаты LT, LN, переводит их из градусов в радианы и обращается к общей процедуре LTLNtoXY, текст которой приведен выше. Вычисленные координаты X,Y процедура BTN1_Click заносит в столбцы 4, 5 таблицы Excel.

Событийная процедура BTN2_Click похожа на процедуру BTN1_Click, только исходные данные она берет из столбцов 4, 5 таблицы, а результаты помещает в столбцы 2, 3. Для вычисления значений LT, LN по известным прямоугольным координатам X, Y она обращается к общей процедуре XYtoLTLN, которая вычисляет географические координаты в следующей последовательности:

  1. устанавливается счетчик итераций K=0;

  2. задается первое приближение, например, LT = 56 ∙ Pi180, LN = CM ∙ Pi180, где Pi180 – константа для перевода градусов в радианы, CM – осевой (центральный) меридиан;

  3. путем обращения к процедуре LTLNtoXY находятся координаты XX, YY, соответствующие LT, LN;

  4. наращивается на 1 счетчик итераций и вычисляются невязки DX = X - XX, DY = Y – YY, DXY = DX2 + DY2 , а также новые значения широты и долготы LT = LT + DX ∙ 1000 / a, LN = LN + DY ∙ 1000 /a / cos(LN);

  5. если DXY < 0.0000001 , то задача считается решенной; в противном случае проверяется значение счетчика итераций;

  6. если K< 20, то управление передается блоку 3; иначе считается, что процесс не сходится (это может быть, если заданы нереальные для Земли координаты X,Y), и в качестве результатов условно присваиваются значения LT = 0, LN = 0.

Обе событийные и общую процедуру XYtoLTLN надо разработать, а в событийной процедуре BTN2_Click также предусмотреть занесение в столбец 6 таблицы числа итераций, за которое сошелся процесс. Для проверки этой процедуры, можно очистить столбцы 2, 3 таблицы и нажать вторую командную кнопку – мы вновь должны получить исходные географические координаты.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]