2016-10-24 4 views
0

Ich arbeite an GIS-basierten Desktop-Anwendung mit C#. Ich verwende die dotspatial-Bibliothek in diesem Projekt.Erstellen von Features (Punkt) Gitter auf Polygon

Jetzt muss ich ein Raster von Features auf Polygon erstellen. Diese Gitterzelle (Rechteck) sollte 20 * 20 Meter Square sein.

Ich habe daran gearbeitet und in der Lage, Gitter zu erstellen, aber mit Blick auf die Zellgröße. Immer wenn die Polygongröße geändert wurde, wurde die Zellengröße ebenfalls reduziert. Mein Code.

  // 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; 
     } 

Ausgabe enter image description here

Nun, wenn ich diesen Code auf geringe Größe von Polygon versucht dann Zelle Rastergröße verringert auch.

enter image description here

ich mein Ansatz wissen, ist nicht richtig, so habe ich auf sie gesucht und bekam einige Werkzeuge. wie

https://gis.stackexchange.com/questions/79681/creating-spatially-projected-polygon-grid-with-arcmap

Aber ich will es in C# erstellen und nicht in der Lage jeden Algorithmus oder andere helfen, Material zu finden.

Bitte teilen Sie Ihr Wissen. Dank

Antwort

1

Ich bin zu verstehen, nicht in der Lage, wenn Sie die Rasterzellengröße sein wollen 20 * 20 Meter, wie funktioniert die Größenänderung von Polygon Polygon. Es sollte immer 20 * 20 Meter sein. In Ihrem Code, wo haben Sie die Werte für ColumnsCount und RowsCount erhalten?

Ihre dx und dy sollten immer 20 sein (wenn die räumlichen Referenzeinheiten in Metern sind) oder Sie müssen die 20 Meter in die entsprechende Länge der Einheiten des räumlichen Bezugssystems umrechnen.

Pseudo-Code für Raster zu erstellen:

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

Das Problem ist hier:

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

weil es die Größe auf dem Polygon abhängig Gitter macht, aber es sollte auf der Skala des festgesetzt Aussicht.

Ich bin nicht vertraut mit der dotspatial framwork, aber Sie müssen in einem Koordinatensystem einer Art arbeiten. Sie sollten Ihr Raster auf dieses Koordinatensystem ausrichten, indem Sie den ersten x-Punkt links vom Polygon in einiger Entfernung von der Polygon-Begrenzungsbox (max/min) berechnen und dann mit der Auflösung des Koordinatensystems bis zum maximalen X von das Polygon.

Verwandte Themen