0

C# を使用して GIS ベースのデスクトップ アプリケーションに取り組んでいます。このプロジェクトでは dotpatial ライブラリを使用しています。

次に、ポリゴン上にフィーチャのグリッドを作成する必要があります。このグリッド セル (長方形) は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 メートルにする必要があります。

あなたのコードでは、どこで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;
}
于 2016-10-26T13:47:30.740 に答える