0

我正在使用 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# 创建它,但找不到任何算法或任何其他帮助材料。

请分享你的知识。谢谢

4

2 回答 2

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;
}
于 2016-10-26T13:47:30.740 回答
1

问题在这里:

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

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

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

于 2016-10-26T14:17:08.740 回答