界面:(暂时未添加选择两个机场信息及计算两个坐标间距离的button,还有不知道怎么按行选择textbox中的数据)
一些基本信息和原理:
IATA/FAA(国际航空运输协会代码)——PEK
ICAO(国际民用航空组织代码)——ZBAA
Latitude——————40.080101013183594
Longitude—————-116.58499908447266
Elevation————-116(ft)=35.3568m
UTC—-通用协调时间—加8
IATA/FAA(国际航空运输协会代码)——PKX
ICAO(国际民用航空组织代码)——ZBAD
Latitude——————39.509945
Longitude—————-116.41092
Elevation————-98(ft)=29.8704m
UTC—-通用协调时间—加8
<Xi’an Xianyang International Airport>
IATA/FAA(国际航空运输协会代码)——XIY
ICAO(国际民用航空组织代码)——ZLXY
Latitude——————34.447102
Longitude—————-108.751999
Elevation————-1572(ft)=479.1456m
UTC—-通用协调时间—加8
所以公式得到:
若地球的半径N近似为6400公里
WGS-84的椭球偏心率 e^2=0.00669437999013
e=0.08182
N(1-e^2)=6357158.4
——————————————————————————————————————
程序代码:
class Airport
{
const double N = 6400000;//地球半径
const double Ne = 6357156.48;//N(1-e^2)
public string airportName;//机场名字
public double latitude;//纬度
public double longtitude;//经度
public double altitude;//high
public void setName(string a)
{
airportName = a;
}
public void setLat(string a)
{
latitude = Convert.ToDouble(a)Math.PI/180;//此处重点强调我犯的错误,第一次结果误差非常大就是在这里,未乘Math.PI/180;弧度和角度需要换算,经纬度给定的是dd的形式,而cos计算需要是弧度单位
在这里:1弧度=180/π度 1度=π/180弧度
}
public void setLon(string b)
{
longtitude = Convert.ToDouble(b)Math.PI/180;
}
public void setAlt(string c)
{
altitude = Convert.ToDouble(c)0.3048;
}
public double latToX(Airport airport)
{
double a = Convert.ToDouble(latitude);
double b = Convert.ToDouble(N + altitude);
double c = Convert.ToDouble(longtitude);
double d = b Math.Cos(a) Math.Cos(c);
return d;
}
public double lonToY(Airport airport)
{
double a = Convert.ToDouble(latitude);
double b = Convert.ToDouble(N + altitude);
double c = Convert.ToDouble(longtitude);
double d = b Math.Cos(a) Math.Sin(c);
return d;
}
public double altToZ(Airport airport)
{
double a = Convert.ToDouble(latitude);
double b = Convert.ToDouble(longtitude);
double c = Ne + altitude;
double d = c Math.Sin(a);
return d;
}
}
private void button1_Click(object sender, EventArgs e)
{
Airport airport = new Airport();
airport.setName(textBox1.Text);
airport.setLat(textBox2.Text);
airport.setLon(textBox3.Text);
airport.setAlt(textBox4.Text);
textBox5.Text = airport.latToX(airport).ToString();
textBox6.Text = airport.lonToY(airport).ToString();
textBox7.Text = airport.altToZ(airport).ToString();
}
[思考:textbox有没有combobox的功能(说不定得改)
可以用ArrayList 存储一下机场类的信息;
(补充:ArrayList可以用于创建动态数组—-意味着数组的大小根据程序的要求自动地增加或减少,不需要指定它的大小,ArrayList可以存储相同类型或者不同类型的元素。属于非泛型集合。在System.Collections命名空间下定义)
两个坐标之间的欧式距离计算 ]
——————————————————-11.17号终止线