Geometry類是全部幾何形體對象的父類,它是一個抽象類,IGeometry接口定義了全部的幾何對象都有的方法和屬性。數組
下面介紹基於Geometry對象的座標轉換的主要接口。函數
函數原型:spa
bool Transform(ISpatialReference spatialReference);code
bool Transform(CoordinateTransformation coordTransform);orm
函數說明:視頻
該方法用於幾何體的投影轉換,當參數爲座標轉換對象時投影轉換過程當中會忽略原來的空間參考。對象
參數說明:blog
名稱教程 |
說明接口 |
spatialReference |
空間參考對象 |
coordTransform |
座標轉換對象 |
返回值 |
投影轉換成功時爲true,不然爲false |
項目路徑 |
百度雲盤地址下/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 } |
同一個地圖上顯示的地理數據的空間參考必須是一致的,所以須要實現空間座標系的相互轉換。ICoordinateTransformation接口主要實現了獲取源座標系統和目標座標系統、實現座標轉換的方法。
下面對基於CoordinateTransformation對象的座標轉換的方法進行介紹。
函數原型:
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 |
示例代碼 |
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 } |