C# 双像空间前方交会
1 简介
首先,以txt文件的形式读取立体像对的外方位元素和同名像点的像空间直角坐标系坐标。然后,依据双像前方交会公式计算出左右相片投影系数、同名像点的像空间辅助坐标系坐标及对应的地面摄影测量坐标系坐标。最后,将中间及最终计算结果用txt文件保存。
2 算法设计与流程图
以txt文件形式存放相片的内、外方位元素及同名像点坐标,数据格式如图1所示。本程序首先是读取内、外方位元素及同名像点坐标;然后,分别依据公式(1)、(2)和(3)计算同名像点的空间辅助坐标系坐标、左右相片的投影系数N1、N2和同名像点对应的地面摄影测量坐标系坐标;最后,将中间结果、最终结果输出到txt文件。算法流程如下图所示。
3 主要函数和变量
3.1 ExternalElement类
存放当张像片的六个外方位元素和焦距,包含Xs, Ys, Zs, o, p, q, f 7个变量,变量均为double类型。
3.2 ImagePoint类
存放像点像点坐标相关属性,计算空间辅助坐标系坐标u,v,w。7个变量分别是id、x、y、u、v、w、element,其中id为string类型,为像点点号;element为ExternalElement类,放置该像片的外方位元素和焦距。
3.3 TerrainPoint类
地面点坐标,包括计算投影系数和地面点坐标X、Y、Z。包括变量id、N1、N2、X、Y、Z
4 部分代码
public class ExternalElement //外方位元素
{
public double Xs, Ys, Zs, o, p, q, f; //六个外方位元素
public ExternalElement(double Xs, double Ys, double Zs, double o, double p, double q, double f)
{
this.Xs = Xs;
this.Ys = Ys;
this.Zs = Zs;
this.o = o;
this.p = p;
this.q = q;
this.f = f;
}
public ExternalElement()
{
Xs = -6911.42788;
Ys = 4181.15686;
Zs = 157.77319;
o = 0.34831;
p = -0.30914;
q = 0.08136;
f = -165.37034;
}
}
public class ImagePoint //像点
{
public string id;
public double x, y;
public double u, v, w; //空间辅助坐标系坐标
public ExternalElement element; //外方位元素
public ImagePoint(string id, double x,double y, ExternalElement element)
{
this.id = id;
this.x = x;
this.y = y;
this.element = element;
double f = element.f;
double o = element.o;
double p = element.p;
double q = element.q;
double pI = Math.PI;
double a1