《坐标系和投影.doc》由会员分享,可在线阅读,更多相关《坐标系和投影.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流坐标系和投影.精品文档.华北水利水电学院授课时间2008年10月20日星期二第四大节授课地点5406实到人数54授课题目坐标系和投影授课专业 班级地理20050092005010教学目的与教学要求使同学们掌握坐标系和投影的概念主要内容1 控件坐标与地图坐标 2 ArcGIS中的投影3 地理坐标系与投影坐标系 4 地理转换重点与难点坐标系和投影教学方法手段(教具)多媒体参考资料ArcGIS Developer Kit课后作业与思考题教学后记教案讲稿部分教学过程时间分配第八讲 坐标系和投影1 控件坐标与地图坐标1.1控件坐标(Control Co
2、ordinate) 在窗体中左上角为原点,水平方向为X轴,竖直方向为Y轴。 在窗体内的地图控件也有它自己的坐标系。其坐标单位与窗体坐标相同。我们将地图控件中的坐标称为控件坐标(Control Coordinate) 。1.2地图坐标(Map Coordinate) 图层数据采用地图坐标系。遵循笛卡尔坐标系原则。 窗体的控件坐标系(左上角永远是0,0)地图控件内显示的地图坐标范围,时常在应用期间改变。当移动某一地图区时,控件内地图坐标范围就会变化。 控件坐标与地图坐标间的区别:地图控件的控制坐标的左上角的位置为(0,0)。地图坐标通常都有一个在地图控件区域很远以外的原点(origin)。应当记住
3、,地图控件只是地图表面的一个小窗口。控件坐标沿Y轴向下递增,而地图坐标沿Y轴向上递增。 地图数据中所用的坐标值通常很大,有的甚至是成百上千或数以百万计的。这些坐标值通常是以英尺或米为单位的。地图资料的坐标,可以不同的坐标系为基础,如平面坐标系(SPCS:State Plane Coordinate System) 或麦卡脱坐标系(UTM:Universal Transverse Mercator)以及其它坐标系。 如果是从别人那里得到的资料,那么其提供者应已设置了适 当的坐标系。 需要注意的一点是应用AE时要确认图层上的资料用统一坐标系。如果不是,那些用了不同坐标系的图层是无法在一起显示的。
4、如果不同的地图资料应用了不同坐标系,但欲使它们同时在AE中使用,那么就需要用一些其它软件,如“ArcView”或 “ArcGIS” 来把不同来源的地图资料转换成合适的坐标系。该 过程称为map projection(“投影变换”)。1.3地图坐标与控件坐标的转换(1)axMapControl.ToMapPoint(int x:Long,in y y:Long)IPoint实现控件坐标到地图坐标的转换。(2)axMapControl.FromMapPoint(pt,x,y)实现地图坐标到控件坐标的转换,将基于地图坐标的点pt的X,Y坐标转换为控件坐标x,y。2 ArcGIS中的投影 ArcGIS
5、中的坐标系有两套:Geographics coordinate system(地理坐标系)和Projected coordinate system(投影坐标系,直角坐标系)。$ArcGISHomeCoordinate Systems目录下可以看到两个文件夹,分别是Geographic Coordinate Systems、Projected Coordinate Systems。 2.1 地理坐标系 在Geographic Coordinate Systems目录中,我们可以看到已定义的许多坐标系信息,典型的如Geographic Coordinate SystemsWorld目录下的WGS
6、1984.prj,里面所定义的坐标参数,里面描述了地理坐标系的名称、大地基准面、椭球体、起始坐标参考点、单位等地理坐标系的完整参数: Alias: Abbreviation: Remarks: Angular Unit: Degree (0.017453292519943299)Prime Meridian: Greenwich (0.000000000000000000)Datum: D_Beijing_1954Spheroid: Krasovsky_1940Semimajor Axis: 6378245.000000000000000000Semiminor Axis: 6356863.0
7、18773047300000000Inverse Flattening: 298.300000000000010000 2.2投影坐标系统 在Projected Coordinate Systems目录中同样存在许多已定义的投影坐标系,我国大部分地图所采用的北京54和西安80坐标系的投影文件就在其中,它们均使用高斯-克吕格投影,前者使用克拉索夫斯基椭球体,后者使用国际大地测量协会推荐的IAG 75地球椭球体。 其完整的参数如下:Projection: Gauss_Kruger Parameters:False_Easting: 500000.000000False_Northing: 0.00
8、0000Central_Meridian: 117.000000Scale_Factor: 1.000000Latitude_Of_Origin: 0.000000Linear Unit: Meter (1.000000)Geographic Coordinate System: Name: GCS_Beijing_1954Alias: Abbreviation: Remarks: Angular Unit: Degree (0.017453292519943299)Prime Meridian: Greenwich (0.000000000000000000)Datum: D_Beijing
9、_1954Spheroid: Krasovsky_1940Semimajor Axis: 6378245.000000000000000000Semiminor Axis: 6356863.018773047300000000Inverse Flattening: 298.300000000000010000 2.3 ArcGIS中坐标系的设置2 地理坐标系和投影坐标系2.1球坐标系与平面坐标系(1)球坐标系 地面点的确定:地面上任一点的位置,通常用经度和纬度来决定。经线和纬线是地球表面上两组正交(相交为90度)的曲线,这两组正交的曲线构成的坐标,称为地理坐标系。 地理坐标系:以经纬度为单位的
10、坐标系统,地面上任一点M的位置可由经度和纬度来决定,记为M(,)。经纬度具有深刻的地理意义,它标示物体在地面上的位置,显示其地理方位(经线与东西相应,纬线与南北相应),此外,经纬线还标示许多地理现象所处的地理带,如气候、土壤等部门都要利用经纬度来推断地理规律。(2)平面坐标系(笛卡尔坐标系)由于地球表面是不可展开的曲面,也就是说曲面上的各点不能直接表示在平面上,因此必须运用地图投影的方法,建立地球表面和平面上点的函数关系,使地球表面上任一点由地理坐标(、)确定的点,在平面上必有一个与它相对应的点,平面上任一点的位置可以用极坐标或直角坐标表示。投影坐标系:地图投影是将球面坐标转换成平面坐标的数学
11、方法。可用不同的数学公式将地球球体表面投影到二维平面上, 而每一个平面坐标系都有一特定的地图投影方法。绝大多数的地图都是遵照一种已知的地理坐标系来显示坐标数据。 我国规定1:1万、1:2.5万、1:5万、1:10万、1:25万、1:50万比例尺地形图,均采用在克拉索夫斯基椭球体上的高斯克吕格投影。但是任何一种对地球表面的表示方法(即地图投影)都会在形状、面积、距离,或者方向上产生变形,不同的投影产生不同的变形,每一种投影都有其各自的适用方面。例如,墨卡托投影适用于海图,其面积变形随着纬度的增高而加大,但其方向变形很小;横轴墨卡托投影的面积变形随着距中央经线的距离的加大而增大,适用于制作不同的国
12、家地图。2.2 椭球体Spheroid AE中预定义了近200种椭球体。ISpheroid接口的属性: Flattening:Double:定义椭球体的扁率f=(a - b)/a SemiMajorAxis:长半轴 SemiMinorAxis:短半轴 2.3基准面Datum AE预定义了种基准面, esriSRDatumType。 基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面,我们通常称谓的北京54坐标系、西安80坐标系实际上指的是我国的两个大地基准面。 我国参照前苏联从1953年起采用克拉索夫斯基(Krassovsky)椭球体建立了我国的北京54坐标系,
13、1978年采用国际大地测量协会推荐的1975地球椭球体建立了我国新的大地坐标系-西安80坐标系,目前大地测量基本上仍以北京54坐标系作为参照。 WGS1984基准面采用WGS84椭球体,它是一地心坐标系,即以地心作为椭球体中心,目前GPS测量数据多以WGS1984为基准。 椭球体与基准面之间的关系是一对多的关系,也就是基准面是在椭球体基础上建立的,但椭球体不能代表基准面,同样的椭球体能定义不同的基准面,如前苏联的Pulkovo 1942、非洲索马里的Afgooye基准面都采用了Krassovsky椭球体,但它们的基准面显然是不同的。 IDatum接口包含的属性: Spheroid:Sphero
14、id基准面所依据的椭球体2.4投影 AE预定义了很多投影方法。 投影是用于投影坐标系中以指定一种数学转换方法,通过这种数学转换将地理坐标转变为投影坐标。如果有人说:该点北京54坐标值为X=4231898,Y=21655933,实际上指的是北京54基准面下的投影坐标,也就是北京54基准面下的经纬度坐标在平面直角坐标上的投影结果。Projection对象的属性: Name:投影名称 FactoryCode:编号 我国的GIS应用工程所采用的投影一般与我国基本地形图系列一致的地图投影系统,这就是大中比例尺(1:50万以上)的高斯-克吕格投影(横轴等角切椭圆柱投影)和小比例尺(1:100万以下)的兰勃
15、特(Lambert)投影(正轴等角割圆锥投影). 2.5地理坐标系对象 地理坐标系使用基于经纬度坐标的坐标系统描述地球上某一点所处的位置。某一个地理坐标系是基于一个基准面来定义的,在AE中有对应的属性Datum与之对应。经度为0的经线称为本初子午线,在AE中是由相应的属性PrimeMeridian来定义。AE预定义了地理坐标系属性如下: Name:String Datum:Datum PrimeMeridian:PrimeMeridian中央经线 factorycode:Long CoorinateUnit:AngularUnit 地理坐标系的设置: ISpatialReferenceFact
16、ory2 pSRFac; ISpatialReference pSR; pSRFac = new SpatialReferenceEnvironmentClass();pSR = pSRFac.CreateGeographicCoordinateSystem(int)(esriSRGeoCSType.esriSRGeoCS_Beijing1954); axMapControl1.SpatialReference = pSR;2.6 投影坐标系对象 投影坐标系使用基于X,Y值的坐标系统来描述地球上某个点所处的位置。这个坐标系是从地球的近似椭球体投影得到的,它对应于某个地理坐标系。在AE中,投影对
17、象的属性:GeoGraphicCoordinateSystem定义了投影坐标系是根据哪个地理坐标进行投影的。投影所使用的方法由属性Projection指定。 AE预定义了投影坐标系 主要属性 Name:String CentralMeridian:Double FalseEasting:Double FalseNorthing:Double Projection:IProjection FactoryCode:Long GeoGraphicCoordinateSystem:IGeoGraphicCoordinateSystem 投影坐标系的设置: ISpatialReferenceFactor
18、y2 pSRFac; ISpatialReference pSR; pSRFac = new SpatialReferenceEnvironmentClass(); pSR =pSRFac.CreateProjectedCoordinateSystem(int)(esriSRProjCSType.esriSRProjCS_Beijing1954GK_17N);axMapControl1.SpatialReference = pSR; 两种坐标系系统设置的条件: 地理坐标系:Spheroid和Datum两个基本条件,地理坐标系统便可以使用。 投影坐标系: a、球面坐标 b、转化过程(也就是算法)
19、 4 地理转换 地理转换适用于两个不同基准面之间投影转换。通常较老的地理坐标系统是适用于某一区域的,但是随着测量技术和测量数据的发展,在本地区会有新的地理坐标系统的产生,因此GeoTransFormation对象可用实现这一转换。关键代码:(1) GeoTransForm_Load中的代码private void GeoTransForm_Load(object sender, EventArgs e) string fileName = Application.StartupPath; fileName = fileName.Remove(fileName.LastIndexOf(); fi
20、leName = fileName.Remove(fileName.LastIndexOf(); fileName = fileName + dataChinaChina.mxd; if (axMapControl1.CheckMxFile(fileName) axMapControl1.LoadMxFile(fileName); (2)新建的实现地理转换的Custom_cfgt()中的代码private void Custom_cfgt() pSpRFc = new SpatialReferenceEnvironmentClass(); pCSin = pSpRFc.CreateProjec
21、tedCoordinateSystem(int)(esriSRProjCSType.esriSRProjCS_Beijing1954GK_17) as IProjectedCoordinateSystem2; pCSout = pSpRFc.CreateProjectedCoordinateSystem(int)(esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_Zone_17) as IProjectedCoordinateSystem2; pCFT = new CoordinateFrameTransformationClass(); pCFT.PutP
22、arameters(100000, 100000, 100000, 0, 0, 0, 1.0); pGT = pCFT as IGeoTransformation; pGCSFrom = pCSin.GeographicCoordinateSystem as IGeographicCoordinateSystem2; pGCSto = pCSout.GeographicCoordinateSystem as IGeographicCoordinateSystem2; pGT.Name = Custom GeoFran; pGT.PutSpatialReferences(pGCSFrom, pG
23、CSto); pGTSet = pSpRFc.GeoTransformationDefaults; pGTSet.Set(esriTransformDirection.esriTransformForward, pGT); pGTSet.Set(esriTransformDirection.esriTransformReverse, pGT); (3) OnMouseDown中的代码private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEv
24、ent e) IPoint pPt; pPt = new PointClass(); pPt.X = e.mapX; pPt.Y = e.mapY; pEnv = new EnvelopeClass(); pEnv = pPt.Envelope; pEnv.Expand(0.01, 0.01, false); pMap = axMapControl1.Map; pActiveView = axMapControl1.ActiveView; pMap.SelectByShape(pEnv, null, false);(4)命令按钮的Click方法中的代码private void btnTrans
25、form_Click(object sender, EventArgs e) pEnumfeat = pMap.FeatureSelection as IEnumFeature; pEnumfeat.Reset(); pFeature = pEnumfeat.Next(); if (pFeature != null) pGeo2 = pFeature.Shape as IGeometry2; else pGeo2 = null; if (pGeo2!= null) Custom_cfgt(); pGeo2.ProjectEx(pCSout as ISpatialReference, esriT
26、ransformDirection.esriTransformForward, pGT, true, 0, 0); else MessageBox.Show(pGeo2不存在); axMapControl1.Refresh(esriViewDrawPhase.esriViewGraphics,null,null); (5)OnAfterDraw中的代码private void axMapControl1_OnAfterDraw(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterDrawEvent e) pSym = ne
27、w SimpleFillSymbolClass(); pColor = new RgbColorClass(); pColor.RGB = 255; pSym.Color = pColor; pSym.Style = esriSimpleFillStyle.esriSFSHorizontal; pColor.RGB = 125; pSym.Outline.Color = pColor; pSym.Outline.Width = 10; m_FillSymbol = pSym as object; esriViewDrawPhase DrawPhase = (esriViewDrawPhase)e.viewDrawPhase; if (DrawPhase = esriViewDrawPhase.esriViewGeography) axMapControl1.DrawShape(pGeo2, ref m_FillSymbol); axMapControl1.Refresh(esriViewDrawPhase.esriViewGraphics, null, null);
限制150内