测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)
Posted 刘一哥GIS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)相关的知识,希望对你有一定的参考价值。
坐标反算一直是困扰测量人的一个问题,坐标反算是指已知两点坐标,反求边长和方位角。本文演示用C#和VB语言实现过程。
一、坐标反算原理
已知两点坐标,反求边长和方位角,称为坐标反算。
1. 原理图
2. 计算公式
3. 象限角
注意:上述计算的角是象限角,还应根据方位角与象限角的关系,将象限角转换为方位角。
由坐标纵轴的北端或南端起,顺时针或逆时针至直线间所夹的锐角,并注出象限名称,称为该直线的象限角,用R表示,角值为0°~ 90°
4. 限角和坐标方位角的关系
二、C#语言实现
1. 界面设计
2. 源代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 坐标反算
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
double XA, YA, XB, YB, R, aAB, DAB, dY, dX;
XA = double.Parse(textBox1.Text);
YA = double.Parse(textBox2.Text);
XB = double.Parse(textBox3.Text);
YB = double.Parse(textBox4.Text);
dY = YB - YA; dX = XB - XA;
R = Math.Atan(Math.Abs(dY) / Math.Abs(dX));
R = R * 180 / 3.14159265;
if (dY > 0 && dX > 0)
aAB = R;
else if (dY > 0 && dX < 0)
aAB = 180 - R;
else if (dY< 0 && dX < 0)
aAB = 180 + R;
else
aAB = 360-R;
textBox5.Text = aAB.ToString();
DAB = Math.Sqrt(Math.Pow(dY,2)+Math.Pow(dX,2));
textBox6.Text = DAB.ToString();
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
三、VB语言实现
1. 界面设计
2. 源代码
计算按钮单击事件:
Private Sub Command1_Click()
Dim xa, ya, xb, yb, R, aab, dab, dy, dx As Double
xa = Val(Text1.Text)
ya = Val(Text2.Text)
xb = Val(Text3.Text)
yb = Val(Text4.Text)
dy = yb - ya
dx = xb - xa
Text7.Text = dy
Text8.Text = dx
R = Atn(Abs(dy) / Abs(dx))
R = R * 180 / 3.14159265
If dy > 0 And dx > 0 Then aab = R
ElseIf dy > 0 And dx < 0 Then aab = 180 - R
ElseIf dy < 0 And dx < 0 Then aab = 180 + R
ElseIf dy < 0 And dx > 0 Then aab = 360 - R
Text5.Text = aab
dab = Sqr(dx ^ 2 + dy ^ 2)
Text6.Text = dab
End Sub
退出按钮单击事件:
Private Sub Command2_Click()
Unload Me
End Sub
以上是关于测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)的主要内容,如果未能解决你的问题,请参考以下文章