C# 在多边形上创建要素(点)栅格

C# 在多边形上创建要素(点)栅格,c#,gis,geospatial,arcgis,dotspatial,C#,Gis,Geospatial,Arcgis,Dotspatial,我正在使用C#开发基于GIS的桌面应用程序。我在这个项目中使用dotspatial库 现在我需要在多边形上创建一个网格。此网格单元(矩形)应为20*20平方米 我已经完成了这项工作,能够创建网格,但面临有关单元格大小的问题。当多边形大小改变时,单元大小也会减小。我的密码 // Polygon Width = 2335 // Polygon Height = 2054 int RowsCount = 111; int Column

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

现在我需要在多边形上创建一个网格。此网格单元(矩形)应为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;
        }
//多边形宽度=2335
//多边形高度=2054
int rowsunt=111;
int columnsunt=111;
var maxPointX=Polygon.Extent.maxPointX;
var minPointX=Polygon.Extent.minPointX;
var maxPointY=Polygon.Extent.maxPointY;
var minPointY=Polygon.Extent.minPointY;
变量dXStep=(maxPointX-minPointX)/(columnsunt-1);
var dYStep=(maxPointY-minPointY)/(rowsunt-1);
var gridColumnsPoints=新的双精度[1000000];
var gridRowPoints=新的双精度[1000000];
//计算网格坐标
var nextPointX=minPointX;

对于(int i=1;i我无法理解,如果希望网格单元大小为20*20米,则大小如何从多边形变为多边形。它应始终为20*20米

在您的代码中,您从何处获得
columnsunt
rowsunt
的值

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;
}
var xMax=Polygon.extent.xMax;
var xMin=Polygon.extent.xMin;
var yMax=Polygon.extent.yMax;
var yMin=Polygon.extent.yMin;
var gridCells=[];
变量x=xMin,y=yMin;

虽然(x我无法理解,但如果您希望网格单元大小为20*20米,那么大小如何从多边形变为多边形。它应该始终为20*20米

在您的代码中,您从何处获得
columnsunt
rowsunt
的值

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;
}
var xMax=Polygon.extent.xMax;
var xMin=Polygon.extent.xMin;
var yMax=Polygon.extent.yMax;
var yMin=Polygon.extent.yMin;
var gridCells=[];
变量x=xMin,y=yMin;
而(x问题在于:

    var dXStep = (maxPointX - minPointX) / (ColumnsCount - 1);
    var dYStep = (maxPointY - minPointY) / (RowsCount - 1);
因为它使栅格大小取决于多边形,但它应该固定到视图的比例

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

问题在于:

    var dXStep = (maxPointX - minPointX) / (ColumnsCount - 1);
    var dYStep = (maxPointY - minPointY) / (RowsCount - 1);
因为它使栅格大小取决于多边形,但它应该固定到视图的比例

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