1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ARCGIS Engine空间参照系处理

ARCGIS Engine空间参照系处理

时间:2023-10-03 14:32:25

相关推荐

ARCGIS Engine空间参照系处理

题记:本文部分内容为转载,部分内容为原创

1.创建空间参考

[csharp]view plaincopy print? ///<summary> ///根据prj文件创建空间参考 ///</summary> ///<paramname="strProFile">空间参照文件</param> ///<returns></returns> publicstaticISpatialReferenceCreateSpatialReference(stringstrProFile) { ISpatialReferenceFactorypSpatialReferenceFactory=newSpatialReferenceEnvironmentClass(); ISpatialReferencepSpatialReference=pSpatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(strProFile); returnpSpatialReference; }[csharp]view plaincopy print? ///<summary> ///创建地理坐标系 ///</summary> ///<paramname="gcType">esriSRProjCS4Type</param> ///<returns></returns> publicstaticISpatialReferenceCreateGeographicCoordinate(esriSRProjCS4TypegcsType) { ISpatialReferenceFactorypSpatialReferenceFactory=newSpatialReferenceEnvironmentClass(); ISpatialReferencepSpatialReference=pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)gcsType); returnpSpatialReference; }[csharp]view plaincopy print? ///<summary> ///创建投影坐标系 ///</summary> ///<paramname="pcType">esriSRProjCS4Type</param> ///<returns></returns> publicstaticISpatialReferenceCreateProjectedCoordinate(esriSRProjCS4TypepcsType) { ISpatialReferenceFactory2pSpatialReferenceFactory=newSpatialReferenceEnvironmentClass(); ISpatialReferencepSpatialReference=pSpatialReferenceFactory.CreateProjectedCoordinateSystem((int)pcsType); returnpSpatialReference; }[csharp]view plaincopy print? ///<summary> ///获取空投影 ///</summary> ///<returns></returns> publicstaticISpatialReferenceCreateUnKnownSpatialReference() { ISpatialReferencepSpatialReference=newUnknownCoordinateSystemClass(); pSpatialReference.SetDomain(0,99999999,0,99999999);//设置空间范围 returnpSpatialReference; }

2.获取空间参考

[csharp]view plaincopy print? ///<summary> ///获取要素集空间参考 ///</summary> ///<paramname="pFeatureDataset">要素集</param> ///<returns></returns> publicstaticISpatialReferenceGetSpatialReference(IFeatureDatasetpFeatureDataset) { IGeoDatasetpGeoDataset=pFeatureDatasetasIGeoDataset; ISpatialReferencepSpatialReference=pGeoDataset.SpatialReference; returnpSpatialReference; }[csharp]view plaincopy print? ///<summary> ///获取要素层空间参考 ///</summary> ///<paramname="pFeatureLayer">要素层</param> ///<returns></returns> publicstaticISpatialReferenceGetSpatialReferenc(IFeatureLayerpFeatureLayer) {IFeatureClasspFeatureClass=pFeatureLayer.FeatureClass; IGeoDatasetpGeoDataset=pFeatureClassasIGeoDataset; ISpatialReferencepSpatialReference=pGeoDataset.SpatialReference; returnpSpatialReference; }[csharp]view plaincopy print? ///<summary> ///获取要素类空间参考 ///</summary> ///<paramname="pFeatureClass">要素类</param> ///<returns></returns> publicstaticISpatialReferenceGetSpatialReference(IFeatureClasspFeatureClass) { IGeoDatasetpGeoDataset=pFeatureClassasIGeoDataset; ISpatialReferencepSpatialReference=pGeoDataset.SpatialReference; returnpSpatialReference; }

3.修改空间参考

[csharp]view plaincopy print? ///<summary> ///修改要素集空间参考 ///</summary> ///<paramname="pFeatureDataset">要素集</param> ///<paramname="pSpatialReference">新空间参考</param> publicstaticvoidAlterSpatialReference(IFeatureDatasetpFeatureDataset,ISpatialReferencepSpatialReference) { IGeoDatasetpGeoDataset=pFeatureDatasetasIGeoDataset; IGeoDatasetSchemaEditpGeoDatasetSchemaEdit=pGeoDatasetasIGeoDatasetSchemaEdit; if(pGeoDatasetSchemaEdit.CanAlterSpatialReference==true) pGeoDatasetSchemaEdit.AlterSpatialReference(pSpatialReference); }[csharp]view plaincopy print? ///<summary> ///修改要素类空间参考 ///</summary> ///<paramname="pFeatureClass">要素类</param> ///<paramname="pSpatialReference">新空间参考</param> publicstaticvoidAlterSpatialReference(IFeatureClasspFeatureClass,ISpatialReferencepSpatialReference) { IGeoDatasetpGeoDataset=pFeatureClassasIGeoDataset; IGeoDatasetSchemaEditpGeoDatasetSchemaEdit=pGeoDatasetasIGeoDatasetSchemaEdit; if(pGeoDatasetSchemaEdit.CanAlterSpatialReference==true) pGeoDatasetSchemaEdit.AlterSpatialReference(pSpatialReference); } 栅格数据椭球变换

<pre name="code" class="csharp"> /// <summary>/// 栅格椭球转换/// </summary>/// <param name="rasterDataset">已知参照系的椭球</param>/// <param name="outSR">输出的栅格的空间参考</param>/// <param name="geoTrans">转换七参数</param>public static void ProjectRasterWithDatumTransformation(IRasterDataset2 rasterDataset, ISpatialReference outSR, esriSRGeoTransformation2Type geoTrans){IRaster raster = rasterDataset.CreateFullRaster();IRasterProps rasterProps = (IRasterProps)raster;rasterProps.SpatialReference = outSR;//七参数设置ISpatialReferenceFactory2 srFactory = new SpatialReferenceEnvironmentClass();IGeoTransformation geoTransformation = (IGeoTransformation)srFactory.CreateGeoTransformation((int)geoTrans);IGeoTransformationOperationSet operationSet = newGeoTransformationOperationSetClass();operationSet.Set(esriTransformDirection.esriTransformForward, geoTransformation);operationSet.Set(esriTransformDirection.esriTransformReverse, geoTransformation);//设置转换IRaster2 raster2 = (IRaster2)raster;raster2.GeoTransformations = operationSet;//保存转换记过结果ISaveAs saveas = (ISaveAs)raster;saveas.SaveAs(@"c:\temp\outputRaster.img", null, "IMAGINE Image");}

创建空间参考系,导出,导入等操作判断两个空间参考系是否相同

/// <summary>/// 本代码介绍了定义一个投影坐标系,定义格网、容差、值等。然后介绍了导入导出两种方式。导出是讲参照系找出成一个*.prj文件,/// 然后应用*.prj文件内容创建一个坐标系/// /// </summary>private void ImportExportSR_Example(){// 创建参照系工作空间Type factoryType = Type.GetTypeFromProgID("esriGeometry.SpatialReferenceEnvironment");System.Object obj = Activator.CreateInstance(factoryType);ISpatialReferenceFactory3 spatialReferenceFactory = obj asISpatialReferenceFactory3;// 创建投影参照系UTM_10,椭球为WGS84椭球.IProjectedCoordinateSystem projectedCoordinateSystem =spatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_WGS1984UTM_10N);ISpatialReferenceResolution spatialReferenceResolution =projectedCoordinateSystem as ISpatialReferenceResolution;ISpatialReferenceTolerance spatialReferenceTolerance = projectedCoordinateSystemas ISpatialReferenceTolerance;//设置容差默认0.001米spatialReferenceResolution.ConstructFromHorizon();spatialReferenceTolerance.SetDefaultXYTolerance();// 导出参照系String fileName = "c:\\temp\\utm10.prj";spatialReferenceFactory.ExportESRISpatialReferenceToPRJFile(fileName,projectedCoordinateSystem);// 根据投影文件在创建一个新的坐标系ISpatialReference projectedCoordinateSystem2 =spatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(fileName);// 检查两个坐标系是否相同IClone comparison = projectedCoordinateSystem as IClone; System.Windows.Forms.MessageBox.Show((comparison.IsEqual(projectedCoordinateSystem2 as IClone)).ToString());ISpatialReference2 comparePrecisions = projectedCoordinateSystem asISpatialReference2;// Should be false, .prj files do not persist coordinate grid information.System.Windows.Forms.MessageBox.Show((comparePrecisions.IsXYPrecisionEqual(projectedCoordinateSystem2)).ToString());}

修改地图的空间参考

///<summary>Use the SpatialReferenceDialog to change the coordinate system or spatial reference of the map.</summary>//////<param name="hWnd">The application window handle.</param>///<param name="map">An IMap interface.</param>/// ///<remarks></remarks>public void ChangeMapSpatialReference(System.Int32 hWnd, ESRI.ArcGIS.Carto.IMap map){if(map == null){return;}ESRI.ArcGIS.CatalogUI.ISpatialReferenceDialog2 spatialReferenceDialog = new ESRI.ArcGIS.CatalogUI.SpatialReferenceDialogClass();ESRI.ArcGIS.Geometry.ISpatialReference spatialReference = spatialReferenceDialog.DoModalCreate(true, false, false, hWnd);if ((!(map.SpatialReferenceLocked))){map.SpatialReference = spatialReference; }}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。