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],PARAMETER 12 ["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],PARAMETER 12 ["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 } |