ArcGIS中的投影和坐标转换
ArcGIS中的投影和坐標轉換
1? ArcGIS中坐標系統的定義
一般情況下地理數據庫(如Personal GeoDatabase的 Feature DataSet 、Shape File等)在創建時都具有空間參考的屬性,空間參考定義了該數據集的地理坐標系統或投影坐標系統,沒有坐標系統的地理數據在生產應用過程中是毫無意義的,但由于在數據格式轉換、轉庫過程中可能造成坐標系統信息丟失,或創建數據庫時忽略了坐標系統的定義,因此需要對沒有坐標系統信息的數據集進行坐標系統定義。
坐標系統的定義是在不改變當前數據集中特征X Y值的情況下對該數據集指定坐標系統信息。
操作方法:運行ArcGIS9中的ArcMap,打開ArcToolBox,打開 Data Management Tools ->Projections and Transformations->Define Projection 項打開坐標定義對話框。介下來在Input DataSet or Feature Class欄中輸入或點擊旁邊的按鈕選擇相應的DataSet或Feature Class;在Coordinate System欄中輸入或點擊旁邊的按鈕選擇需要為上述DataSet或Feature定義的坐標系統。最后點OK鍵即可。
例如 某點狀shape文件中 某點P的坐標為? X 112.2? Y 43.3 ,且該shape文件沒有帶有相應的Prj文件,即沒有空間參考信息,也不知道X Y 的單位。通過坐標系統定義的操作定義其為Beijing1954坐標,那么點P的信息是東經112.2度 北緯43.3度。
2? ArcGIS中的投影方法
投影的方法可以使帶某種坐標信息數據源進行向另一坐標系統做轉換,并對源數據中的X和Y值進行修改。我們生產實踐中一個典型的例子是利用該方法修正某些舊地圖數據中X,Y值前加了帶數和分帶方法的數值。
操作方法:運行ArcGIS9中的ArcMap,打開ArcToolBox,打開 Data Management Tools ->Projections and Transformations->Feature->Project 項打開投影對話框。在Input DataSet or Feature Class欄中輸入或點擊旁邊的按鈕選擇相應的DataSet或Feature Class(帶有空間參考),Output DataSet or Feature Class欄中輸入或點擊旁邊的按鈕選擇目標DataSet或Feature Class,在Output Coordinate System 欄中輸入或點擊旁邊的按鈕選擇目標數據的坐標系統。最后點OK鍵即可。
例如 某點狀shape文件中 某點P的坐標為? X 40705012? Y 3478021 ,且該shape文件坐標系統為中央為東經120度的高斯克呂格投影,在數據使用過程中為了將點P的值改為真實值X 705012? Y478021,首先將源數據的投影參數中False_Easting和False_Northing值分別加上40000000和3000000作為源坐標系統,修改參數前的坐標系統作為投影操作的目標坐標系統,然后通過投影操作后生成一新的Shape文件,且與源文件中點P對應的點的坐標為X 705012? Y478021。
3? 編程實現坐標轉換和投影
3.1 矢量數據投影和坐標轉換
相關接口
3.1.1 IGeometry.Project方法
該方法聲明如下: (C#語法)
public void Project (
????ISpatialReference newReferenceSystem
);
該方法對實現Igeoemtry的對象進行投影操作, 參數為目標空間參考.以下代碼中實現了對Point對象從一個空間參考到另一個空間參考的投影操作:
//Create Spatial Reference Factory
????? ??????ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass();
??????????? ISpatialReference sr1;
??????????? //GCS to project from
????????????IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);
??????????? sr1 = gcs;
??????????? sr1.SetFalseOriginAndUnits(-180, -90, 1000000);
??????????? //Projected Coordinate System to project into
??????????? IProjectedCoordinateSystem pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983N_AmericaLambert);
??????????? pcs.SetFalseOriginAndUnits(0, 0, 1000);
??????????? ISpatialReference sr2;
??????????? sr2 = pcs;
??????????? //Point to project
??????????? IPoint point = new PointClass() as IPoint;
??????????? point.PutCoords(-117.17, 34.06);
??????????? //Geometry Interface to do actual project
??????????? IGeometry geometry;
??????????? geometry = point;
??????????? geometry.SpatialReference = sr1;
??????????? geometry.Project(sr2);
??????????? point = geometry as IPoint;
??????????? double x;
??????????? double y;
??????????? point.QueryCoords(out x, out y);
??????????? Debug.Print("X: " + x.ToString());
??????????? Debug.Print("Y: " + y.ToString());
IGeometry接口的Project方法提供的投影操作實現了最基本的坐標轉換功能. 實際數據處理過程中, 比較明確數據轉換前后空間參考信息情況下一般用此方法作坐標轉換,不同投影帶之間的坐標轉換就是一個典型.
3.1.2 ITransform2D接口
ITransform2D接口不僅提供了圖形平移, 旋轉和縮放,還提供了更加強大的坐標轉換方法Transform. 其定義如下:(C#語法)
public void Transform (
????esriTransformDirection direction,
????ITransformation transformation
);
在該方法中, 參數direction是轉換方向, transformation是一個Itransformation接口, 而Itransformation接口由很多類實現,這意味著不同的實現類,所包含的坐標轉換數學公式是不一的, 這里面包括二次多項式轉換(AffineTransformation2D), AbridgedMolodensky轉換(AbridgedMolodenskyTransformation)等。每一種實現類的轉換方法這里不再贅述,可參照ArcObjects聯機幫助獲得更詳細的信息,下面舉例來說明該方法的使用:(Delphi 代碼)
procedure Transform_(FromPtColl, ToPtColl: IPointCollection; pGeo as IGeometry);
var
? pAffineTransformation2D: IAffineTransformation2D;
? ControlPtCnt: integer;
? FormPtArray: array of IPoint;
? ToPtArray: array of IPoint;
? i: integer;?
??pTransform2D: ITransform2D;
begin
? //判斷給定的控制點是否合法
? if FromPtColl.PointCount <> ToPtColl.PointCount then
??? begin
????? //控制點不成對錯誤
????? exit;
??? end;
? if FromPtColl.PointCount < 4 then
??? begin
????? //控制點不能少于4個
????? exit;
??? end;
? ControlPtCnt := FromPtColl.PointCount;
? SetLength(FormPtArray, ControlPtCnt);
? SetLength(ToPtArray, ControlPtCnt);
? for i := 0 to ControlPtCnt -1 do
??? begin
????? FormPtArray[i] := CoPoint.Create as IPoint;
????? FormPtArray[i].PutCoords(FromPtColl.Point[i].X,? FromPtColl.Point[i].Y);
????? ToPtArray[i] := CoPoint.Create as IPoint;
????? ToPtArray[i].PutCoords(ToPtColl.Point[i].X,? ToPtColl.Point[i].Y);
??? end;
? //創建? AffineTransformation2D 對象
? pAffineTransformation2D := CoAffineTransformation2D.Create as IAffineTransformation2D;?
??//設置控制點信息
? pAffineTransformation2D.DefineFromControlPoints(ControlPtCnt, FormPtArray[0], ToPtArray[0]);?
??//轉到ITransform2D接口
?pTransform2D := pGeo as ITransform2D;
? //坐標轉換
? pTransform2d.Transform(esriTransformForward, pAffineTransformation2D);
end;
?
ITransform接口較Igeoemtry提供了更加豐富的坐標轉換方法。
3.2 影像數據糾正。
影像數據糾正可以通過IrasterGeometryProc接口實現。該接口提供了影像Clip, Filp, Merge, Mirror以及Mosaic等操作。如果通過控制點的方式對影像進行糾正處理可以通過該接口的wrap方法。該方法聲明如下:(C#語法)
public void Warp (
????IPointCollection sourceControlPoints,
????IPointCollection targetControlPoints,
????esriGeoTransTypeEnum transformType,
????IRaster ipRaster
);
參數 sourceControlPoints和targetControlPoint定義了控制點信息, transformType定義了坐標轉換方法, ipRaster是需要轉換的Raster對象. 以下代碼是該接口使用的例子:
public static void GeoreferenceRaster(IRasterDataset2 rasterDataset, IPointCollection sourcePoints, IPointCollection targetPoints)
{
? //this sample show how to georeference a raster using control points
? // sourcePoints: represents source control points
? // targetPoints: represents target control points? IRasterGeometryProc rasterPropc = new RasterGeometryProcClass();
? IRaster raster = rasterDataset.CreateDefaultRaster();? //set the transformatin
? rasterPropc.Warp(sourcePoints, targetPoints, esriGeoTransTypeEnum.esriGeoTransPolyOrder1, raster);? //There are two ways to get the georeferenced result: to save the transformation with the input raster dataset
? rasterPropc.Register(raster);? //or save to another new raster dataset
? rasterPropc.Rectify(@"c:\temp\georeferencing_output.img", "IMAGINE Image", raster);
}
需要注意的是當選擇不同的轉換類型時(參數transformType取值不同時), 對控制點的對數也有不同的要求. 這個可以參照聯機幫助中的詳細說明.
此外, 使用IrasterGeometryProc.Wrap方法, 會略微改變影像圖的色彩值, 當對一幅影像圖前后轉換作對比時會發現這種色彩的變化情況.
個人認為,ArcGIS對影像圖的處理功能較其他一些專業影像處理軟件來講,還是稍顯遜色了些.?
轉載于:https://www.cnblogs.com/zany-hui/articles/1272568.html
總結
以上是生活随笔為你收集整理的ArcGIS中的投影和坐标转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 您是否也想过让你的电脑百毒不侵呢!
- 下一篇: PING 命令测试