Question

Comment puis-je prendre un ensemble de polygones contenant des valeurs arbitraires et créer un bitmap correspondant où chaque pixel contient la valeur du polygone à cet emplacement ?

Pour mettre la question en contexte, mes polygones contiennent des informations sur le nombre moyen de personnes par kilomètre carré à l'intérieur du polygone.Je dois créer un raster/bitmap contenant des pixels représentant la population dans des bacs de 200 mètres.

J'ai fait quelque chose de similaire dans le passé où j'ai utilisé un polygone pour créer un masque en dessinant dans un bitmap et en remplissant des valeurs, puis en convertissant le bitmap en un tableau que je peux manipuler.Je suis sûr qu'il existe une meilleure méthode pour y parvenir !

Je clarifie un peu plus la question comme demandé.

  1. Il existe plusieurs polygones, chaque polygone est un ensemble de vecteurs
  2. Chaque polygone aura une seule valeur unique
  3. Les polygones ne se chevauchent pas

Merci

pseudo

Était-ce utile?

La solution

@Nick R.

J'utilisais à l'origine ArcGIS 9.2, mais cela ne fonctionne pas bien avec C# et 64 bits, j'utilise donc maintenant GDAL (http://www.gdal.org).

N'a pas gdal_rasterize fais exactement ce que tu veux ?

Autres conseils

Quel logiciel SIG utilisez-vous ?ArcGIS propose l'outil Polygon to Raster dans ArcGIS 9.2 ou version ultérieure, qui est scriptable en tant que fonction PolygonToRaster_conversion.

PolygonToRaster_conversion (in_features, value_field, out_raster_dataset, cell_assignment, priority_field, cellsize)

Ce n'est probablement pas ce dont vous avez besoin, mais si vous souhaitez dessiner un polygone (ou inversement lire les pixels d'une image polygonale sur une base polygonale), une solution consiste à lancer le vôtre. outil de remplissage de polygone.Franchement, c’est très amusant et vraiment intéressant à apprendre.

Mais votre question n'est pas très claire pour moi.Pouvez-vous donner une meilleure description?

  • Votre ensemble de polygones arbitraires est-il des images réelles, ou des points vectoriels (c'est-à-dire une liste de points), ou ???
  • Chaque polygone a-t-il une valeur ou chaque polygone a-t-il un tableau de valeurs que vous essayez de dessiner ?
  • Ainsi, chaque polygone est associé à un tableau de valeurs de population avec lesquelles vous souhaitez essentiellement texturer le polygone ?

-Adam

C'est un projet amusant.Voici ce que je ferais, en supposant que les polygones sont convexes :

 have a NY * 2 array of x positions: int x[NY][2]
foreach polygon
  clear the array to -1
  for each edge line
    foreach horizontal raster line iy intersecting the line
      generate ix, the x position where the raster intersects the line
      if x[iy][0] == -1, set it to ix, else set x[iy][1] to ix
    end foreach iy
  end foreach edge
  foreach iy
    fill the pixels between x[iy][0] and x[iy][1] with the polygons label
  end foreach iy
end foreach polygon

C'est un peu plus délicat qu'il n'y paraît, car vous avez besoin de discipline mentale pour considérer les coordonnées raster NON comme les pixels à étiqueter, mais comme les lignes invisibles ENTRE eux.Sinon, vous êtes complètement confus par les problèmes de limites.

Un bon test de ceci est que si vous avez un polygone de surface nulle, comme s'il est constitué d'arêtes allant du point A au point B et de retour à A, il ne doit éclairer aucun pixel.Un autre test est que si vous avez un parallélogramme de 2 unités de haut et que ses bords supérieur et inférieur mesurent 2 unités de large, il doit éclairer exactement 4 pixels.

Si les polygones ne sont PAS convexes, c'est un peu différent.Partout où un bord traverse une ligne raster, basculez tous les pixels de là vers une coordonnée X arbitrairement choisie, telle que le bord gauche de "l'écran".Lorsque vous aurez terminé tous les bords, seuls les pixels intérieurs auront été basculés un nombre impair de fois.

ImageMagick peut convertir de svg en png, peut-être pouvez-vous jeter un œil au code, ou simplement créer du svg et utiliser IM pour la conversion ? Miteux est-ce que.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top