本本

态度决定成败

导航

定义基本 CoordSys 操作

CoordSys 对象包含关于 X 和 Y 坐标如何与其在 Earth 上的位置相关联的基本信息。 每个 Geometry 或 Map 对象都有一个关联的坐标系。 CoordSys 对象包含对坐标系的详细说明。 CoordSysFactory 类提供了各种用于创建不同 CoordSys 对象的方法。 所有 CoordSys 对象都是只读的,无法修改。


public static void MapInfo_Geometry_CreateCoordSys()
{
    CoordSysFactory factory = Session.Current.CoordSysFactory;
    // create CoordSys objects from srsName
    CoordSys csysWGS84 = factory.CreateCoordSys("EPSG:4326");
    CoordSys csysNAD83 = factory.CreateCoordSys("mapinfo:coordsys 1,74");
    CoordSys csysNAD27 = factory.CreateCoordSys("SRID:8260");
    //create CoordSys objects from code/codeSpace
    csysWGS84 = factory.CreateCoordSys("4326", CodeSpace.Epsg);
    csysNAD83 = factory.CreateCoordSys("coordsys 1,74", CodeSpace.MapInfo);
    csysNAD27 = factory.CreateCoordSys("8260", CodeSpace.Srid);
    //create CoordSys objects from user-defined parameters
    Datum datum = factory.CreateDatum(DatumID.WGS84);
    csysWGS84 = factory.CreateCoordSys(CoordSysType.LongLat, datum, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
    datum = factory.CreateDatum(DatumID.NAD83);
    csysNAD83 = factory.CreateCoordSys(CoordSysType.LongLat, datum, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
    datum = factory.CreateDatum(DatumID.NAD27ContinentalUS);
    csysNAD27 = factory.CreateCoordSys(CoordSysType.LongLat, datum, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null);
    // create Long/Lat coordinate system
    csysWGS84 = factory.CreateLongLat(DatumID.WGS84);
    csysNAD83 = factory.CreateLongLat(DatumID.NAD83);
    csysNAD27 = factory.CreateLongLat(DatumID.NAD27ContinentalUS);
    // create from MapBasic string
    CoordSys csysRGF93 = factory.CreateFromMapBasicString("CoordSys Earth Projection 3, 33,\"m\", 3, 46.5, 44, 49, 700000, 6600000");
    // create from PRJ string
    csysNAD83 = factory.CreateFromPrjString("1, 74");
}



CoordSys csysNAD83 = Session.Current.CoordSysFactory.CreateCoordSys("mapinfo:coordsys 1,0");
            MessageBox.Show(csysNAD83.Distance(DistanceType.Cartesian,DistanceUnit.Millimeter,new DPoint((double)this.nudLat1.Value, (double)this.nudLng1.Value),new DPoint( (double)this.nudLat2.Value, (double)this.nudLng2.Value)).ToString());

自己写的计算方法:
 public double Fun_Rad(double d)
        {
            return d * Math.PI / 180.0;
        }
  /// <summary>
        /// 计算指定两点间的长度
        /// </summary>
        /// <param name="lat1"></param>
        /// <param name="lng1"></param>
        /// <param name="lat2"></param>
        /// <param name="lng2"></param>
        /// <returns></returns>
        public double Fun_GetDistance(double lat1, double lng1, double lat2, double lng2)
        {
            double d_EarthRadius = 6378.137;
            double radLat1 = Fun_Rad(lat1);
            double radLat2 = Fun_Rad(lat2);
            double radLat = Fun_Rad(lat1) - Fun_Rad(lat2);
            double radLng = Fun_Rad(lng1) - Fun_Rad(lng2);
            double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(radLat / 2), 2) +
             Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(radLng / 2), 2)));
            s = s * d_EarthRadius;
            s = Math.Round(s * 10000) / 10000;
            return s;
        }

posted on 2009-09-09 09:29  本本  阅读(1359)  评论(0编辑  收藏  举报