我正在使用C#开发基于GIS的桌面应用程序。我在这个项目中使用了点空间库。
现在我需要在多边形上创建一个特征网格。此网格单元格(矩形)应 20 * 20 Meter Square 。
我已经研究过并且能够创建网格但面临与单元格大小相关的问题。每当多边形尺寸改变时,单元尺寸也会减小。我的代码。
// 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;
}
现在,当我在小尺寸的Polygon上尝试此代码时,网格单元的大小也会减少。
我知道我的方法不正确,所以我搜索了它并获得了一些工具。像
https://gis.stackexchange.com/questions/79681/creating-spatially-projected-polygon-grid-with-arcmap
但我想用C#创建它,无法找到任何算法或任何其他帮助材料。
请分享您的知识。感谢
答案 0 :(得分:1)
我无法理解,如果您希望网格单元格大小为 20 * 20米,则大小如何从多边形变为多边形。它应始终 20 * 20米。
在您的代码中,您在哪里获得ColumnsCount
和RowsCount
的值?
您的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;
}
答案 1 :(得分:1)
问题在于:
var dXStep = (maxPointX - minPointX) / (ColumnsCount - 1);
var dYStep = (maxPointY - minPointY) / (RowsCount - 1);
因为它使网格大小依赖于多边形,但应该固定到视图的比例。
我不熟悉dotpatial框架,但你必须在一种坐标系中操作。您应该通过计算距离多边形边界框(最大/最小)一定距离的多边形左边的第一个x位置,然后将坐标系的分辨率逐步调整到最大X,将网格对齐到该坐标系。多边形。