界面:(暂时未添加选择两个机场信息及计算两个坐标间距离的button,还有不知道怎么按行选择textbox中的数据)
    image.png
    一些基本信息和原理:

    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

    图片1.png

    所以公式得到:
    image.png
    若地球的半径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号终止线