ArcEngine中坐标超出测量范围
在以前分析和总结过关于"坐标或测量值超出范围"的问题。如下:
但在开发和使用中也经常遇到此类问题,本文说一说在ArcEngine中的相关处理。总结下来就一点,在创建、拓扑等操作时生成的范围起出了要素的设置范围。
获取要素范围
我们知道,创建一个没有任何坐标系统上要素图层,它的默认是要素范围均是:
(-450359962737.05, 450359962737.05, -450359962737.05, 450359962737.05)
创建一个有指定坐标系统的要素图层,它的默认范围是根据坐标系统自动生成的,例如:
CGCS2000_3_Degree_GK_CM_84E(-5123200, 5123200,-10002100, ,10002100)
在ArcMap中看到的不是正确值。
通过GetDomain方法,范围此范围的坐标值。
private void GetSpatialReferenceProperties(IFeatureClass featureClass) { IGeoDataset geoDataset = featureClass as IGeoDataset; ISpatialReference spatialReference = geoDataset.SpatialReference; double xMin; double xMax; double yMin; double yMax; spatialReference.GetDomain(out xMin, out xMax, out yMin, out yMax); Console.WriteLine(xMin + ", " + xMax + ", " + yMin + ", " + yMax); }
也可以通过GetFalseOriginAndUnits方法范围,其中falseX和falseY代表要素范围X最小值、Y最小值。
private void GetFalseOriginAndUnits(IFeatureClass featureClass) { IGeoDataset geoDataset = featureClass as IGeoDataset; ISpatialReference spatialReference = geoDataset.SpatialReference; double falseX; double falseY; double xyUnits; spatialReference.GetFalseOriginAndUnits(out falseX, out falseY, out xyUnits); Console.WriteLine(falseX + ", " + falseY + ", " + xyUnits); }
修改要素范围
使用GetDomain、GetFalseOriginAndUnits对应的SetDomain、SetFalseOriginAndUnits方法修改要素范围。
private void SetDomain (IFeatureClass featureClass) { IGeoDataset geoDataset = featureClass as IGeoDataset; ISpatialReference spatialReference = geoDataset.SpatialReference; spatialReference.SetDomain(-5123200, 90000, -10002100, 10002100); }
也可以通过spatialReferenceResolution的ConstructFromHorizon方法构造默认的要素范围。
private void SetSpatialReferenceProperties(IFeatureClass featureClass) { IGeoDataset geoDataset = featureClass as IGeoDataset; ISpatialReference spatialReference = geoDataset.SpatialReference; ISpatialReferenceResolution spatialReferenceResolution = spatialReference as ISpatialReferenceResolution; spatialReferenceResolution.ConstructFromHorizon(); }
作者:我也是个傻瓜
出处:http://www.cnblogs.com/liweis/
签名:成熟是一种明亮而不刺眼的光辉。