Создание координатной (точечной) сетки на полигоне

Я работаю над настольным приложением на основе ГИС с использованием C#. Я использую многопользовательскую библиотеку в этом проекте.

Теперь мне нужно создать сетку объектов на полигоне. Эта ячейка сетки (прямоугольник) должна иметь площадь 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# и не могу найти ни один алгоритм или любой другой вспомогательный материал.

Пожалуйста, поделитесь своими знаниями. Спасибо

2 ответа

Я не могу понять, если вы хотите, чтобы размер ячейки сетки составлял 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;
}

Проблема здесь:

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

потому что это делает размер сетки зависимым от многоугольника, но это должно быть зафиксировано в масштабе вида.

Я не знаком с точечной пространственной структурой, но вы должны работать в некоторой системе координат. Вы должны выровнять свою сетку к этой системе координат, вычислив первый x pos слева от многоугольника на некотором расстоянии от ограничивающего прямоугольника многоугольников (max/min), а затем перейдите с разрешением системы координат до максимального X of полигон

Другие вопросы по тегам