ArcGIS Engine开发之旅10--空间参考及坐标转换
2016-09-25 10:39
211 查看
原文ArcGIS Engine开发之旅10--空间参考及坐标转换
空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标。 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两个图层的空间参考不一致,往往会导致两幅地图无法正确拼合,因此开发一个 GIS 系统时,为数据选择正确的空间参考非常重要。
1 相关知识
1.1大地水准面
大地水准面是由静止海水面并向大陆延伸所形成的不规则的封闭曲面。
1.2地球椭球体
由定义可以知大地水准面的形状也是不规则的,仍不能用简单的数学公式表示,为了测量成果的 计算和制图的需要,人们选用一个同大地水准面相近的可以用数学方法来表达的椭球体来代替, 简称地球椭球体,它是一个规则的曲面,是测量和制图的基础,因地球椭球体是人们选定的跟大 地水准面很接近的规则的曲面,所以地球椭球体就可以有多个,地球椭球体是用长半轴、短半轴 和扁率来表示的。
View Code
空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标。 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两个图层的空间参考不一致,往往会导致两幅地图无法正确拼合,因此开发一个 GIS 系统时,为数据选择正确的空间参考非常重要。
1 相关知识
1.1大地水准面
大地水准面是由静止海水面并向大陆延伸所形成的不规则的封闭曲面。
1.2地球椭球体
由定义可以知大地水准面的形状也是不规则的,仍不能用简单的数学公式表示,为了测量成果的 计算和制图的需要,人们选用一个同大地水准面相近的可以用数学方法来表达的椭球体来代替, 简称地球椭球体,它是一个规则的曲面,是测量和制图的基础,因地球椭球体是人们选定的跟大 地水准面很接近的规则的曲面,所以地球椭球体就可以有多个,地球椭球体是用长半轴、短半轴 和扁率来表示的。
public void ProjectExExample() { ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass(); // ISpatialReference pFromCustom = pSpatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(@"E:\arcgis\Engine\z idingyi.prj"); IPoint pFromPoint = new PointClass(); pFromPoint.X = 518950.788; pFromPoint.Y = 4335923.97; IZAware pZAware = pFromPoint as IZAware; pZAware.ZAware = true; pFromPoint.Z = 958.4791; // ((IGeometry)pFromPoint).SpatialReference = pFromCustom; //自定义投影WGS84下的北京6度19带。 ((IGeometry)pFromPoint).SpatialReference = CreateCustomProjectedCoordinateSystem(); //目标投影 IProjectedCoordinateSystem projectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esr iSRProjCS_Xian1980_GK_Zone_19); //因为目标基准面和原始基准面不在同一个上,所以牵扯到参数转换,我用7参数 转换 ICoordinateFrameTransformation pCoordinateFrameTransformation = new CoordinateFrameTransformationClass(); pCoordinateFrameTransformation.PutParameters(-112.117, 4.530, 21.89, -0.00058702, -0.00476421, 0.00009358, 0.99998006411); pCoordinateFrameTransformation.PutSpatialReferences(CreateCustomProjectedCoordinate System(), projectedCoordinateSystem as ISpatialReference); //投影转换 IGeometry2 pGeometry = pFromPoint as IGeometry2; pGeometry.ProjectEx(projectedCoordinateSystem as ISpatialReference, esriTransformDirection.esriTransformForward, pCoordinateFrameTransformation, false, 0, 0); } private IProjectedCoordinateSystem CreateCustomProjectedCoordinateSystem() { ISpatialReferenceFactory2 pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass(); IProjectionGEN pProjection = pSpatialReferenceFactory.CreateProjection((int) esriSRProjectionType.esriSRProjection_GaussKruger) as IProjectionGEN;IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); ILinearUnit pUnit = pSpatialReferenceFactory.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter) as ILinearUnit; IParameter[] pParameters = pProjection.GetDefaultParameters(); IProjectedCoordinateSystemEdit pProjectedCoordinateSystemEdit = new ProjectedCoordinateSystemClass(); object pName = "WGS-BeiJing1954"; object pAlias = "WGS-BeiJing1954"; object pAbbreviation = "WGS-BeiJing1954"; object pRemarks = "WGS-BeiJing1954"; object pUsage = "Calculate Meter From lat and lon"; object pGeographicCoordinateSystemObject = pGeographicCoordinateSystem as object; object pUnitObject = pUnit as object; object pProjectionObject = pProjection as object; object pParametersObject = pParameters as object; pProjectedCoordinateSystemEdit.Define(ref pName, ref pAlias, ref pAbbreviation, ref pRemarks, ref pUsage, ref pGeographicCoordinateSystemObject, ref pUnitObject,ref pProjectionObject, ref pParametersObject); IProjectedCoordinateSystem5 pProjectedCoordinateSystem = pProjectedCoordinateSystemEdit as IProjectedCoordinateSystem5; pProjectedCoordinateSystem.FalseEasting = 500000; pProjectedCoordinateSystem.LatitudeOfOrigin = 0; pProjectedCoordinateSystem.set_CentralMeridian(true,111); pProjectedCoordinateSystem.ScaleFactor=1; pProjectedCoordinateSystem.FalseNorthing=0; return pProjectedCoordinateSystem; }
View Code
相关文章推荐
- ArcGIS Engine开发之旅10--空间参考及坐标转换
- ArcGIS Engine开发之旅10--空间参考及坐标转换
- ArcGIS Engine开发之旅09--几何对象和空间参考
- ArcGIS Engine开发之旅09--几何对象和空间参考
- ArcGIS Engine基础开发教程(6)——学习空间分析 .
- BlackBerry 10 Cascade开发参考资料 API部分
- c#+ArcGIS Engine-获取矢量图层的空间参考
- ArcGIS Engine开发之空间查询
- JBoss4 应用服务器Web开发人员参考手册(10):使用JSF
- ArcGIS Engine开发之旅05---空间数据库
- ArcGIS Engine开发之空间查询
- ArcGIS Engine 10 开发常见问题的解决方法
- Arcgis Engine for java 10 开发环境配置
- 空间参考(三)-ArcGIS Engine的支持
- ArcGIS Engine 10开发环境的一些常见问题
- Arcgis Engine for java 10 开发环境配置
- ArcGIS Engine基础开发教程(6)——学习空间分析
- VS2010下WPF开发ARCGIS ENGINE 10的带Ribbon控件项目
- ArcGIS Engine开发之旅05---空间数据库
- ArcGIS Engine开发之旅05---空间数据库