1. 基于SpatialReference对象的坐标转换
1.1 示例简介
Geometry类是所有几何形体对象的父类,它是一个抽象类,IGeometry接口定义了所有的几何对象都有的方法和属性。
下面介绍基于Geometry对象的坐标转换的主要接口。
Transform方法
函数原型:
bool Transform(ISpatialReference spatialReference);
bool Transform(CoordinateTransformation coordTransform);
函数说明:
该方法用于几何体的投影转换,当参数为坐标转换对象时投影转换过程中会忽略原来的空间参考。
参数说明:
名称 | 说明 |
spatialReference | 空间参考对象 |
coordTransform | 坐标转换对象 |
返回值 | 投影转换成功时为true,否则为false |
1.2 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/SpatialReference. CoordinateTransform |
视频路径 | 百度云盘地址下/PIE视频教程/ Geometry的坐标转换avi |
示例代码 | |
1 private void GeometryTest() 2 { 3 // 空间参考WKT字符串 4 string str_BJ54 = "GEOGCS[\"GCS_Beijing_1954\",DATUM[\"D_Beijing_1954\", 5 SPHEROID[\"Krasovsky_1940\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\", 6 0.017453292519943295]]";string str_BJ54_18 = "PROJCS[\"Beijing_1954_GK_Zone_18\",GEOGCS[\"GCS_Beijing_1954\", 8 DATUM[\"D_Beijing_1954\", 9 SPHEROID[\"Krasovsky_1940\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",10 0.017453292519943295]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"False_Easting\",11 18500000],PARAMETER[\"False_Northing\",0],PARAMETER[\"Central_Meridian\",105],PARAMETER12 [\"Scale_Factor\",1],PARAMETER[\"Latitude_Of_Origin\",0],UNIT[\"Meter\",1]]";13 14 ISpatialReference spatialReference1 = new GeographicCoordinateSystem();15 spatialReference1.ImportFromWkt(str_BJ54);1 ISpatialReference spatialReference2 = new ProjectedCoordinateSystem();17 spatialReference2.ImportFromWkt(str_BJ54_18);18 19 // 定义点20 IPoint point = new PIE.Geometry.Point();21 point.PutCoords(104, 45, 0.0);22 23 // 设置空间参考24 IGeometry geo = point as IGeometry;25 geo.SpatialReference = spatialReference1;26 27 // 空间参考变换28 geo.Transform(spatialReference2);29 } |
2. 基于CoordinateTransformation对象的坐标转换
2.1 示例简介
同一个地图上显示的地理数据的空间参考必须是一致的,因此需要实现空间坐标系的相互转换。ICoordinateTransformation接口主要实现了获取源坐标系统和目标坐标系统、实现坐标转换的方法。
下面对基于CoordinateTransformation对象的坐标转换的方法进行介绍。
TransformEx方法
函数原型:
bool TransformEx(int count, array<double>pX, array<double>pY, array<double> pZ, array<int> pSuccess);
函数说明:
该方法用于坐标系统的坐标转换。
参数说明:
名称 | 说明 |
count | 要转换的个数 |
pX | X坐标 |
pY | Y坐标 |
pZ | Z坐标 |
pSuccess | 转换结果数组 |
返回值 | 坐标转换是否成功,转换成功返回1,否则返回0 |
2.2 示例代码
示例代码 |
1 private void CoordinateTransformationTest() 2 { 3 // 空间参考WKT字符串 4 string str_BJ54 = "GEOGCS[\"GCS_Beijing_1954\",DATUM[\"D_Beijing_1954\", 5 SPHEROID[\"Krasovsky_1940\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\", 6 0.017453292519943295]]"; 7 string str_BJ54_18 = "PROJCS[\"Beijing_1954_GK_Zone_18\",GEOGCS[\"GCS_Beijing_1954\", 8 DATUM[\"D_Beijing_1954\", 9 SPHEROID[\"Krasovsky_1940\",6378245,298.3]],PRIMEM[\"Greenwich\",0],UNIT[\"Degree\",10 0.017453292519943295]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"False_Easting\",11 18500000],PARAMETER[\"False_Northing\",0],PARAMETER[\"Central_Meridian\",105],PARAMETER12 [\"Scale_Factor\",1],PARAMETER[\"Latitude_Of_Origin\",0],UNIT[\"Meter\",1]]";13 14 // 生成空间参考对象15 ISpatialReference spatialReference1 = SpatialReferenceFactory.CreateSpatialReference(str_BJ54);16 ISpatialReference spatialReference2 = SpatialReferenceFactory.CreateSpatialReference(str_BJ54_18);17 18 // 坐标转换19 int count = 3;20 double[] px = new double[] { 104, 105, 106 };21 double[] py = new double[] { 45, 46, 47 };22 double[] pz = new double[] { 0, 0, 0 };23 int[] pSuccess = new int[3];24 CoordinateTransformation coordTF = new CoordinateTransformation(spatialReference1, spatialReference2);25 coordTF.TransformEx(count, px, py, null, pSuccess);26 } |