【问题标题】:Creating features(point) grid on polygon在多边形上创建特征(点)网格
【发布时间】:2016-10-24 20:00:43
【问题描述】:

我正在使用 C# 开发基于 GIS 的桌面应用程序。我在这个项目中使用点空间库。

现在我需要在多边形上创建一个要素网格。此网格单元(矩形)应为 20*20 平方米

我已经研究过它并且能够创建网格但面临关于单元格大小的问题。每当多边形大小改变时,单元格大小也会减小。我的代码。

         // Polygon Width = 2335
        // Polygon Height = 2054

        int RowsCount = 111;
        int ColumnsCount = 111;

        var maxPointX = Polygon.Extent.MaxPointX;
        var minPointX = Polygon.Extent.MinPointX;

        var maxPointY = Polygon.Extent.MaxPointY;
        var minPointY = Polygon.Extent.MinPointY;

        var dXStep = (maxPointX - minPointX) / (ColumnsCount - 1);
        var dYStep = (maxPointY - minPointY) / (RowsCount - 1);

        var gridColumnsPoints = new double[1000000];
        var gridRowPoints = new double[1000000];

        //   Calculate the coordinates of grid
        var nextPointX = minPointX;

        for (int i = 1; i <= ColumnsCount; i++)
        {
            gridColumnsPoints[i - 1] = nextPointX;
            nextPointX = nextPointX + dXStep;
        }

        var nextPointY = minPointY;

        for (int i = 1; i <= RowsCount; i++)
        {
            gridRowPoints[i - 1] = nextPointY;
            nextPointY = nextPointY + dYStep;
        }

输出

现在,当我在小尺寸多边形上尝试此代码时,网格单元大小也减小了。

我知道我的方法不正确,所以我搜索了它并获得了一些工具。喜欢

https://gis.stackexchange.com/questions/79681/creating-spatially-projected-polygon-grid-with-arcmap

但我想用 C# 创建它,但找不到任何算法或任何其他帮助材料。

请分享您的知识。谢谢

【问题讨论】:

    标签: c# gis geospatial arcgis dotspatial


    【解决方案1】:

    我无法理解,如果您希望网格单元大小为 20*20 米,那么多边形之间的大小如何变化。它应始终为 20*20 米

    在您的代码中,您从哪里获得ColumnsCountRowsCount 的值?

    您的 dx 和 dy 应始终为 20(如果空间参考单位为米),或者您需要将 20 米转换为空间参考单位的适当长度。

    创建网格的伪代码:

    var xMax = Polygon.extent.xmax;
    var xMin = Polygon.extent.xmin;
    var yMax = Polygon.extent.ymax;
    var yMin = Polygon.extent.ymin;
    
    var gridCells = [];
    var x = xMin, y = yMin;
    
    while(x <= xMax){
        var dx = x + 20;
    
        while(y <= yMax){
            var dy = y + 20;
    
            var cell = new Extent(x, y, dx, dy);
            gridCells.push(cell);
    
            y = dy;
        }
        x = dx;
    }
    

    【讨论】:

      【解决方案2】:

      问题出在这里:

          var dXStep = (maxPointX - minPointX) / (ColumnsCount - 1);
          var dYStep = (maxPointY - minPointY) / (RowsCount - 1);
      

      因为它使网格大小取决于多边形,但它应该固定到视图的比例。

      我不熟悉点空间框架,但您必须在某种坐标系中操作。您应该通过计算距多边形边界框(最大/最小)一定距离的多边形左侧的第一个 x pos 将您的网格与该坐标系对齐,然后将坐标系的分辨率逐步提高到最大 X多边形。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多