2016-10-24 2 views
0

Je travaille sur une application de bureau basée sur GIS en utilisant C#. J'utilise la bibliothèque dotspatial dans ce projet. Maintenant, j'ai besoin de créer une grille d'entités sur le polygone. Cette cellule de la grille (rectangle) doit être 20 * 20 mètres carrés.Création de grille de points (points) sur un polygone

J'ai travaillé dessus et je suis capable de créer des grilles mais je suis confronté à des problèmes de taille de cellule. Chaque fois que la taille du polygone a changé la taille de la cellule, elle a également été réduite. Mon 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; 
     } 

Sortie enter image description here

Maintenant, quand j'ai essayé ce code sur la petite taille de Polygon alors la taille des cellules de grille a également diminué.

enter image description here

Je sais que mon approche est pas correct, j'ai donc cherché sur elle et a obtenu quelques outils. comme

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

Mais je veux créer dans C# et incapable de tout algorithme trouvé ou tout autre matériel aidant.

Veuillez partager vos connaissances. Merci

Répondre

1

Je ne suis pas en mesure de comprendre, si vous voulez que la taille de la cellule de la grille soit 20 * 20 mètres, comment la taille change du polygone au polygone. Il devrait toujours être 20 * 20 mètres.

Dans votre code, où avez-vous obtenu les valeurs pour ColumnsCount et RowsCount? Vos dx et dy doivent toujours être 20 (si les unités de référence spatiales sont en mètres) ou vous devez convertir les 20 mètres en longueur d'unités appropriées de la référence spatiale.

code pseudo pour la création de grille:

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

Le problème est ici:

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

car elle rend la taille de la grille en fonction du polygone, mais il doit être fixé à l'échelle du vue.

Je ne suis pas familier avec le cadre dotspatial, mais vous devez opérer dans un système de coordonnées. Vous devez aligner votre grille sur ce système de coordonnées en calculant le premier x pos à gauche du polygone à une certaine distance de la boîte englobante des polygones (max/min), puis en suivant la résolution du système de coordonnées jusqu'au maximum X de le polygone.