• 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();
    }
  • 相关阅读:
    列出对像属性,for(var i in obj)
    检测碰撞实例
    Rectangle 、getBounds(this)
    判断mc是否播放完成的简单方法
    操作规范时间工具类
    文本框中文字用htmlText操作并且实现文本框中文字加链接【link的用法】
    让舞台上的btn灰掉
    简单的缓动
    加入文本框
    HDU 1297 Children’s Queue (DP)
  • 原文地址:https://www.cnblogs.com/liweis/p/16359203.html
Copyright © 2020-2023  润新知