Categories
VB.NET

ПИНМ – версия 1.0.1

pinm-adjustment-result

Страница: Параметрично изравнение на нивелачни мрежи

Връзка: ПИНМ_v1.0.1

Описание:

Програмата служи за параметрично изравнение на нивелачни мрежи по МНМК.

Примерно съдържание на входен файл с дадени репери:

нр2000 470

Примерно съдържание на входен файл с измервания (нивелачни ходове):

нр2000 нр500 0 37 0
нр500 нр600 5 30 0
нр500 нр700 0 54 0
нр500 нр800 5.0001 82 0
нр600 нр700 -5 30 0
нр600 нр800 0.0000 54 0
нр700 нр800 5 31 0
нр800 нр450 -5.0003 693 0
нр450 нр250 0 35 0
нр450 нр350 5 30 0
нр450 нр150 4.999 70 0
нр250 нр350 4.9999 34 0
нр250 нр150 5 51 0
нр350 нр150 0.0001 42 0

Примерен резултат след изравнение на мрежата:

ПАРАМЕТРИЧНО ИЗРАВНЕНИЕ НА НИВЕЛАЧНА МРЕЖА

Неизвестни (Параметри) = [8]; Измервания (Уравнения) = [14]; Свръхизмервания = [6];
Дадени репери = [1];

ИЗЧИСЛЯВАНЕ НА ПРИБЛИЗИТЕЛНИТЕ ВИСОЧИНИ НА НОВИТЕ РЕПЕРИ

Приблизителна височина на нр500    = 470.000[m], изчислена от нр2000
Приблизителна височина на нр600    = 475.000[m], изчислена от нр500
Приблизителна височина на нр700    = 470.000[m], изчислена от нр500
Приблизителна височина на нр800    = 475.000[m], изчислена от нр500
Приблизителна височина на нр450    = 470.000[m], изчислена от нр800
Приблизителна височина на нр250    = 470.000[m], изчислена от нр450
Приблизителна височина на нр350    = 475.000[m], изчислена от нр450
Приблизителна височина на нр150    = 474.999[m], изчислена от нр450

РЕЗУЛТАТ ОТ ИЗРАВНЕНИЕТО

Нивелачен ход      Изм. прев.[m]     mh[mm] Изр. прев.[m]     mh[mm]      v[mm]     mv[mm]
нр2000  ->нр500           0.0000       0.25       0.00000       0.25       0.00       0.00 
нр500   ->нр600           5.0000       0.23       5.00001       0.18       0.01       0.14 
нр500   ->нр700           0.0000       0.31       0.00002       0.20       0.02       0.23 
нр500   ->нр800           5.0001       0.38       5.00003       0.22      -0.07       0.31 
нр600   ->нр700          -5.0000       0.23      -5.00000       0.17       0.00       0.15 
нр600   ->нр800           0.0000       0.31       0.00002       0.20       0.02       0.23 
нр700   ->нр800           5.0000       0.23       5.00001       0.18       0.01       0.14 
нр800   ->нр450          -5.0003       1.09      -5.00030       1.09       0.00       0.00 
нр450   ->нр250           0.0000       0.25      -0.00012       0.18      -0.12       0.17 
нр450   ->нр350           5.0000       0.23       4.99981       0.17      -0.19       0.15 
нр450   ->нр150           4.9990       0.35       4.99968       0.21       0.68       0.28 
нр250   ->нр350           4.9999       0.24       4.99993       0.18       0.03       0.17 
нр250   ->нр150           5.0000       0.30       4.99979       0.20      -0.21       0.22 
нр350   ->нр150           0.0001       0.27      -0.00013       0.19      -0.23       0.19 

ОЦЕНКА НА ТОЧНОСТТА

[PVV] = 0.943
СКГ за единица тежест Me = 0.40[mm]

ДАДЕНИ РЕПЕРИ

Репер    Височина[m]
нр2000   470.0000

НОВИ РЕПЕРИ

Репер    Височина[m] mH[mm]
нр500    470.00000   0.25
нр600    475.00001   0.31
нр700    470.00002   0.32
нр800    475.00003   0.33
нр450    469.99973   1.14
нр250    469.99962   1.16
нр350    474.99954   1.16
нр150    474.99941   1.16
Categories
Visual C# Геодезия

Програма за изравнение на мрежи

Програма за изравнение на планови мрежи

Изравнение на планови мрежи по метода на най-малките квадрати.

Изравнение на засечки – ъглови, линейни, ъглово-линейни, геодезически мрежи, полигони.

Въвеждане на измервания и координати

adjustment-dpi-file-open
adjustment-kor-file-open

Изчисляване на ориентировъчните ъгли на дадените точки

adjustment-orientation-angles-calculation

Изчисляване на несъвпаденията в триъгълниците

adjustment-triangles-misclosures-calculation

Изчисляване на приблизителни координати на новите точки

adjustment-approximate-coordinates-calculation

Изравнение на мрежата (измервания и нови точки)

adjustment-adjusted-observations
adjustment-adjusted-points

Други

Categories
Геодезия

Еднозначно решение на линейна засечка

Решението на линейната засечка в геодезията може, най-просто, да се представи като пресичане на две окръжности с радиуси – измерените дължини от новата точка P към две дадени точки A и B, и начало – съответно в точки A и B.

Ако от точка P сме измерили посоки към дадените точки A и B, с помощта на тези посоки можем да определим конфигурацията на триъгълника ABP и съответно да приложим формулите за решаването на линейната засечка. Ако посоките са сортирани по възходящ ред, а разликата между по-голямата и по-малката посока е по малко от 200 гради, то конфигурацията на триъгълника е такава, че точките трябва да участват във формулите обърнато т. е. точка B трябва да участва във формулите като точка A и обратното – точка A трябва да участва като точка B. В противен случай точките не се обръщат. По този начин решението е еднозначно и не се налага търсене на трета дадена точка, към която да е измервана дължина.

Categories
VB.NET

Решаване на геодезически засечки

Описание:

Това е клас за решаване на геодезически засечки на VB.NET.

Класът включва методи за решаване на права и линейна засечка.

Не е включен метод за решаване на обратна засечка.

Връзки:

Код:

Imports System
Imports System.Math
Public Class PointDetermination
Public Structure Point
Public x, y As Double
End Structure
Public Structure Result
Public x, y As Double
Public m_x, m_y, m_p As Double
End Structure
Private ro As Double = 636.6197
Public Function intersection(ByVal pntA As Point, ByVal pntB As Point, _
ByVal b1 As Double, ByVal b2 As Double, _
ByVal mB As Integer) As Result
Dim angle As Object = New Angle
Dim sap, sbp, c As Double
Dim b3, aap, abp, aab, aba As Double
Dim pntP(2) As Point
Dim res As Result
If pntA.x = pntB.x And pntA.y = pntB.y Then
Throw New Exception(String.Format(My.Resources.equivalentPoints, "A", "B"))
End If
If (b1 + b2) >= 200 Then
Throw New Exception(My.Resources.invalidAngleValue)
End If
If b1 <= 0 Or b2 <= 0 Then
Throw New Exception(My.Resources.invalidAngleValue)
End If
aab = angle.headingAngle(pntB.y - pntA.y, pntB.x - pntA.x)
c = Sqrt(Math.Pow(pntB.y - pntA.y, 2) + Math.Pow(pntB.x - pntA.x, 2))
b3 = 200 - (b1 + b2)
sap = (c * Sin(angle.toRad(b2))) / Sin(angle.toRad(b3))
sbp = (c * Sin(angle.toRad(b1))) / Sin(angle.toRad(b3))
aap = If(aab - b1 < 0, aab - b1 + 400, aab - b1)
aba = If(aab < 200, aab + 200, aab - 200)
abp = If(aba + b2 > 400, aba + b2 - 400, aba + b2)
With pntP(0)
.x = pntA.x + sap * Cos(angle.toRad(aap))
.y = pntA.y + sap * Sin(angle.toRad(aap))
End With
With pntP(1)
.x = pntB.x + sbp * Cos(angle.toRad(abp))
.y = pntB.y + sbp * Sin(angle.toRad(abp))
End With
With res
.x = (pntP(0).x + pntP(1).x) * 0.5
.y = (pntP(0).y + pntP(1).y) * 0.5
.m_x = Nothing
.m_y = Nothing
.m_p = (mB / (ro * Sin(angle.toRad(b3)))) * Sqrt(Math.Pow(sap, 2) + Math.Pow(sbp, 2))
End With
Return res
End Function
Public Function arcSection(ByVal pntA As Point, ByVal pntB As Point, _
ByVal sap As Double, ByVal sbp As Double, _
ByVal a As Double, ByVal b As Double) As Result
Dim angle As Object = New Angle
Dim b1, b2, b3 As Double
Dim aap, abp, aab, aba As Double
Dim dx, dy, s, c As Double
Dim m_s As Double
Dim pntP(2) As Point
Dim res As Result
If pntA.x = pntB.x And pntA.y = pntB.y Then
Throw New Exception(String.Format(My.Resources.equivalentPoints, "A", "B"))
End If
If sap <= 0 Or sbp <= 0 Then
Throw New Exception(My.Resources.negativeOrZeroLengthSide)
End If
If (Sqrt(Math.Pow(pntA.x - pntB.x, 2) + Math.Pow(pntA.y - pntB.y, 2))) >= (sap + sbp) Then
Throw New Exception(My.Resources.notAVerticesOfATriangle)
End If
If (Sqrt(Math.Pow(pntA.x - pntB.x, 2) + Math.Pow(pntA.y - pntB.y, 2)) + sap) <= sbp Then
Throw New Exception(My.Resources.notAVerticesOfATriangle)
End If
If (Sqrt(Math.Pow(pntA.x - pntB.x, 2) + Math.Pow(pntA.y - pntB.y, 2)) + sbp) <= sap Then
Throw New Exception(My.Resources.notAVerticesOfATriangle)
End If
dy = pntB.y - pntA.y
dx = pntB.x - pntA.x
aab = angle.headingAngle(dy, dx)
c = Sqrt(Math.Pow(dy, 2) + Math.Pow(dx, 2))
s = 0.5 * (sap + sbp + c)
b1 = 2 * angle.toGrad(Atan(Sqrt(((s - sap) * (s - c)) / (s * (s - sbp)))))
b2 = 2 * angle.toGrad(Atan(Sqrt(((s - sbp) * (s - c)) / (s * (s - sap)))))
b3 = 2 * angle.toGrad(Atan(Sqrt(((s - sap) * (s - sbp)) / (s * (s - c)))))
aap = If(aab - b1 < 0, aab - b1 + 400, aab - b1)
aba = If(aab < 200, aab + 200, aab - 200)
abp = If(aba + b2 > 400, aba + b2 - 400, aba + b2)
With pntP(0)
.x = pntA.x + sap * Cos(angle.toRad(aap))
.y = pntA.y + sap * Sin(angle.toRad(aap))
End With
With pntP(1)
.x = pntB.x + sbp * Cos(angle.toRad(abp))
.y = pntB.y + sbp * Sin(angle.toRad(abp))
End With
m_s = a + b * (((sap + sbp) * 0.001) * 0.5)
With res
.x = (pntP(0).x + pntP(1).x) * 0.5
.y = (pntP(0).y + pntP(1).y) * 0.5
.m_x = (m_s / Sin(angle.toRad(b3))) * Sqrt(Math.Pow(Sin(angle.toRad(aap)), 2) + Math.Pow(Sin(angle.toRad(abp)), 2))
.m_y = (m_s / Sin(angle.toRad(b3))) * Sqrt(Math.Pow(Cos(angle.toRad(aap)), 2) + Math.Pow(Cos(angle.toRad(abp)), 2))
.m_p = (m_s / Sin(angle.toRad(b3))) * Sqrt(2)
End With
Return res
End Function
End Class