定义基本 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;
}