我现在要求一个点B(lon2,lat2)的坐标,已知A(111.121211,20.22322),B相对于A的距离是2.555km,B相对于A的角度已知.跟距公式应该是可以算出来的,但用公里直接来算是不对的,要转换为经纬度的单位,但不知怎么转换谁能给个好主意!!

解决方案 »

  1.   

    #define  PI       3.14159265358979323 //3.14159265353846
    //当计算两点间距离时,经纬度差小于下面的门限值用地球半径,大于下面门限时用大圆算
    #define      TWO_P_DIS_LIMIT   0.1   
    double        RadFactor = PI/180;              //弧度与度的比例因子
    double    RevRadFactor = 180/PI;           //度与弧度的比例因子
    #define  eR            6378245double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height);/*
    参数:
    BgnLongi:起始点经度
    BgnLati :起始点纬度
    EndLongi:终点经度
    EndLati :终点纬度
    Height  :高程
    返回值:两点间距离
    */
    double TwoPointDistance(double BgnLongi, double BgnLati, double EndLongi, double EndLati, int Height)
    {
      double  distance;
      double  a0,b0,C0;
      double  t2,t1 = 0,BiasE,BiasN;
      
      BiasE = fabs(BgnLongi-EndLongi);
      BiasN = fabs(BgnLati-EndLati);  //当经纬度都小于门限值时,采用两点间直线距离
    if((BiasE<TWO_P_DIS_LIMIT)&&(BiasN<TWO_P_DIS_LIMIT))    
    {
    t2=sqrt(BiasN*BiasN+BiasE*BiasE)*RadFactor;
    distance=t2*(eR+Height);
    }
    else  //当经纬度都大于门限值时,采用大圆距离
      {
        a0=(90-EndLati)*RadFactor;
        b0=(90-BgnLati)*RadFactor;
        C0=fabs(BgnLongi-EndLongi)*RadFactor;
      t1 = cos(a0)*cos(b0)+sin(a0)*sin(b0)*cos(C0);
        t2 = acos(t1);
    distance=(eR+Height)*t2;
      }
    return distance;
    }
    也是人家给我的!
      

  2.   

    非常感激!!但我要的不是计算距离,我的条件是已知距离和一个点的坐标,求另一个点的坐标啊?
    经纬度都是GPS吞出的数据,坐标系就是mapinfo/mapx默认的坐标系,地图比例尺已知,怎么求??