vdemidov писал(а):Ну вообще-то я здесь не спрашивал форму вычисления площади полигона на плоскости. Ее я слава богу еще со школьного курса знаю.
Господин Демидов, я совершенно неспособен узнать дистанционно - что Вы изволите знать со "школьного курса" - а что только предполагаете узнать...
Было спрошено "
зашла речь о вычислении площади полигона, а мне ее точное вычисление делать некогда"
и было отвечено формулой вычисления площади полигона.
Если бы было спрошено преобразование географических координат в координаты прямоугольной проекции - было бы отвечено формулой вычисления координат прямоугольной проекции. Вообще конечно рулит поиск, для чего я указал - что именно нужно искать: "ГОСТ Р 51794-2001".
Там все эти формулы указаны с условной точностью вычисления в миллиметры в пределах полигонов стокилометровой размерности. Конечно - речь идет о проекции гаусса-крюгера. Потому что площади более-менее крупных полигонов в проекции меркатора (испольтзуемой в навигации) - вычислять бессмысленно, как бессмысленно приравнивать поверхность цилиндра к поверхности шара того же диаметра. А Вы кажется точность хотели?
для гаусса крюгера без привязки к местной системе координат (то есть совпадения с кадастровой площадью НЕ будет):
Const Pi As Double = 3.14159265358979 ' Число Пи
Const ro As Double = 206264.8062 ' Число угловых секунд в радиане
' Эллипсоид Красовского (Пулково 1942)
Const aP As Double = 6378245 ' Большая полуось
Const alP As Double = 1 / 298.3 ' Сжатие
Const e2P As Double = 2 * alP - alP ^ 2 ' Квадрат эксцентриситета
' Эллипсоид GRS80 (WGS84)
Const aW As Double = 6378137 ' Большая полуось
Const alW As Double = 1 / 298.257223563 ' Сжатие
Const e2W As Double = 2 * alW - alW ^ 2 ' Квадрат эксцентриситета
Const e As Double = e2W ^ 0.5 ' Эксцентриситет
Const e4 As Double = e ^ 4 ' Эксцентриситет в 4 степени
Const e6 As Double = e ^ 6 ' Эксцентриситет в 6 степени
' Вспомогательные значения для преобразования эллипсоидов
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
' Линейные элементы трансформирования, в метрах
Const dx As Double = 25
Const dy As Double = -141
Const dz As Double = -80
' Угловые элементы трансформирования, в секундах
Const wx As Double = 0
Const wy As Double = 0
Const wz As Double = 0
' Дифференциальное различие масштабов
Const ms As Double = 0
Function G2X(LatP, LonP, CMer) As Double
' функция вычисления координаты X по широте-долготе WGS-84
' входные значения - в десятичных градусах широты LatP, долготы LonP и
' центрального меридиана CMer (принимаем для вычисления площади полигона долготу первой точки полигона)
Dim LatR, LonR, Lat0, C, nu, Aa, T, CMerR, M, M0 As Double
LatR = LatP * (Pi / 180) 'преобразуем градусы в радианы
LonR = LonP * (Pi / 180) '-"
Lat0 = 0 * (Pi / 180) '
CMerR = CMer * (Pi / 180) '
C = e2W * Cos(LatR) ^ 2 / (1 - e2W)
nu = aW / Sqr(1 - e2W * Sin(LatR) ^ 2)
Aa = (LonR - CMerR) * Cos(LatR)
T = Tan(LatR) ^ 2
M = aW * ((1 - e2W / 4 - 3 * e4 / 64 - 5 * e6 / 256) * LatR - (3 * e2W / 8 + 3 * e4 / 32 + 45 * e6 / 1024) * Sin(2 * LatR) + _
(15 * e4 / 256 + 45 * e6 / 1024) * Sin(4 * LatR) - (35 * e6 / 3072) * Sin(6 * LatR))
M0 = aW * ((1 - e2W / 4 - 3 * e4 / 64 - 5 * e6 / 256) * Lat0 - (3 * e2W / 8 + 3 * e4 / 32 + 45 * e6 / 1024) * Sin(2 * Lat0) + _
(15 * e4 / 256 + 45 * e6 / 1024) * Sin(4 * Lat0) - (35 * e6 / 3072) * Sin(6 * Lat0))
G2X = M - M0 + nu * Tan(LatR) * Aa ^ 2 / 2 + (5 - T + 9 * C + 4 * C ^ 2) * Aa ^ 4 / 24 + (61 - 58 * T + T ^ 2 + 600 * C - 330 * e2W) * Aa ^ 6 / 720
End Function
Function G2Y(LatP, LonP, CMer) As Double
' функция вычисления координаты Y по широте-долготе WGS-84
' входные значения - в десятичных градусах широты LatP, долготы LonP и
' центрального меридиана CMer (принимаем для вычисления площади полигона долготу первой точки полигона)
Dim LatR, LonR, Lat0, CMerR, C, nu, Aa, T As Double
LatR = LatP * (Pi / 180)
LonR = LonP * (Pi / 180)
Lat0 = 0 * (Pi / 180)
CMerR = CMer * (Pi / 180)
C = e2W * Cos(LatR) ^ 2 / (1 - e2W)
nu = aW / Sqr(1 - e2W * Sin(LatR) ^ 2)
Aa = (LonR - CMerR) * Cos(LatR)
T = Tan(LatR) ^ 2
G2Y = nu * (Aa + (1 - T + C) * Aa ^ 3 / 6 + (5 - 18 * T + T ^ 2 + 72 * C - 58 * e2W) * Aa ^ 5 / 120)
End Function