如题

解决方案 »

  1.   

    http://www.cnblogs.com/ycsfwhh/archive/2010/12/20/1911232.html
      

  2.   

    计算距离的都有偏差,最好是和使用的GIS控件一起用同一个方法,如果你用的是MAPINFO,哪门你就用MAPINFO的计算距离函数。
      

  3.   

    其实MapInfo的MapX控件计算距离是用三角形的斜边长度得到的。
    多年前我自己做一个简单的地图控件,实现了计算方法,然后与MapX对照,有小差别,后来摸索,发现了一种方法,与MapX计算的距离几乎一样,就明白了MapX的计算原理,它反而不如我那个计算方法精确。
      

  4.   

    我的实现方法如下,现在回想起来,MapInfo的MapX是把地球当成一个标准的球体来计算的,这点我通过调整以下函数中用到的常量验证过的.
    /////////////////////////////////////////////////////////////////////function  Distance(X1,Y1,X2,Y2:real) : real;  //近似计算地球上 两点的距离,参数为经、纬度,结果单位为 米。function  TMapX.Distance(X1,Y1,X2,Y2:real) : real;
    var
      LongiRate:real;
      DeltaLongitude,DeltaLatitude:real;
    begin
      LongiRate:=Cos((Y1+Y2)/(2*Arc2Degree));  //化成弧度求平均值。
      DeltaLongitude:=(X1-X2)* LongiDegree2Length *LongiRate;
                               //=111320.590351;  //经度差一度(在赤道上)的长度,米
      DeltaLatitude :=(Y1-Y2)* LatiDegree2Length ;
                               //=110947.089891;
      Result:=Sqrt(Sqr(DeltaLongitude)+Sqr(DeltaLatitude));
    end;
      

  5.   

    用到的常量为:
       myPi=3.1415926535897932385;
       Arc2Degree=57.295779513082321;
       LongiDegree2Length=111320.590351;      //经度差一度(在赤道上)的长度,米
         //Pi* 6,378.2*1000/180
       LatiDegree2Length=110947.089891;    // 纬度差一度(经线上)的长度,米
         //Pi* 6,356.8*1000/180
      

  6.   

    直线距离 用地球一些常量计算途经路线距离可以用 google maps api
    来做
    http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/v2/examples/directions-advanced.html