ArcEngine中坐标超出测量范围

在以前分析和总结过关于"坐标或测量值超出范围"的问题。如下:

坐标或测量值超出范围 - 我也是个傻瓜

但在开发和使用中也经常遇到此类问题,本文说一说在ArcEngine中的相关处理。总结下来就一点,在创建、拓扑等操作时生成的范围起出了要素的设置范围

获取要素范围

我们知道,创建一个没有任何坐标系统上要素图层,它的默认是要素范围均是:

(-450359962737.05, 450359962737.05, -450359962737.05, 450359962737.05)

创建一个有指定坐标系统的要素图层,它的默认范围是根据坐标系统自动生成的,例如:

CGCS2000_3_Degree_GK_CM_84E(-5123200, 5123200,-10002100, ,10002100)

在ArcMap中看到的不是正确值。

通过GetDomain方法,范围此范围的坐标值。

1
2
3
4
5
6
7
8
9
10
11
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最小值。

1
2
3
4
5
6
7
8
9
10
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方法修改要素范围。

1
2
3
4
5
6
private void SetDomain (IFeatureClass featureClass)
{
    IGeoDataset geoDataset = featureClass as IGeoDataset;
    ISpatialReference spatialReference = geoDataset.SpatialReference;
    spatialReference.SetDomain(-5123200, 90000, -10002100, 10002100);
}

也可以通过spatialReferenceResolution的ConstructFromHorizon方法构造默认的要素范围。

1
2
3
4
5
6
7
private void SetSpatialReferenceProperties(IFeatureClass featureClass)
{
    IGeoDataset geoDataset = featureClass as IGeoDataset;
    ISpatialReference spatialReference = geoDataset.SpatialReference;
    ISpatialReferenceResolution spatialReferenceResolution = spatialReference as ISpatialReferenceResolution;
    spatialReferenceResolution.ConstructFromHorizon();
}
posted @   我也是个傻瓜  阅读(678)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2019-06-09 快速手工实现软件著作权源码60页制作
点击右上角即可分享
微信分享提示