Frage

Wie kann ich einen Satz von Polygonen, die beliebigen Werte enthalten und eine entsprechende Bitmap erstellen, in dem jedes Pixel den Wert des Polygons an dieser Stelle enthält?

die Frage in einem Kontext zu setzen, mein Polygone enthält Informationen über die durchschnittliche Anzahl der Personen pro Quadratkilometer innerhalb des Polygons. Ich brauche ein Raster / Bitmap zu erstellen, die die Pixel darstellen, die Bevölkerung in 200 Metern Bins enthält.

Ich habe etwas ähnliches in der Vergangenheit getan, wo ich ein Polygon verwendet haben, um eine Maske zu erstellen, indem Sie in eine Bitmap zeichnen und Werte füllen, dann Umwandeln der Bitmap in ein Array, das ich manipulieren kann. Ich bin sicher, es gibt eine bessere Methode, dies zu tun!

Ich bin Klärung der Frage ein bisschen mehr wie gewünscht geplant.

  1. Es gibt mehrere Polygone, jedes Polygon ist ein Satz von Vektoren
  2. Jedes Polygon wird einen einzigen eindeutigen Wert haben
  3. Die Polygone nicht überlappen

Danke

Nick

War es hilfreich?

Lösung

@ Nick R

  

Ich war ursprünglich ArcGIS 9.2 verwenden, aber das funktioniert nicht gut mit C # und 64 Bit, so dass ich bin jetzt mit GDAL ( gdal_rasterize genau das tun, was Sie wollen?

Andere Tipps

Welche GIS-Software verwenden Sie? ArcGIS bietet das Polygon in Raster-Werkzeug in ArcGIS 9.2 oder höher, die als PolygonToRaster_conversion Funktion skriptfähig ist.

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

Dies ist wahrscheinlich nicht das, was Sie brauchen, aber wenn Sie ein Polygon zeichnen möchten (oder umgekehrt ein Polygon Bild der Pixel auf einem Polygon Basis gelesen), dann eine Lösung ist Ihre eigene Polygonfüllprozedur Werkzeug . Ganz ehrlich, das ist eine Menge Spaß, und wirklich ordentlich zu lernen.

Aber Ihre Frage ist mir nicht ganz klar. Können Sie eine bessere Beschreibung geben?

  • Ist Ihr Satz von beliebigen Polygonen tatsächliche Bilder oder Vektor (dh Liste der Punkte) Punkte oder ???
  • Ist jedes Polygon einen Wert hat, oder hat jedes Polygon hat eine Reihe von Werten, die Sie zeichnen wollen?
  • So jedes Polygon hat eine zugehörige Reihe von Bevölkerungs Werte, die Sie wollen Textur im Wesentlichen das Polygon mit?

-Adam

Es ist ein Spaß-Projekt. Hier ist, was ich tun würde, vorausgesetzt, die Polygone konvex ist:

 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

Dies ist ein wenig komplizierter, als es klingt, weil Sie die mentale Disziplin müssen von Raster denken Koordinaten nicht als Pixel markiert werden, sondern als die unsichtbaren Linien zwischen ihnen. Andernfalls Sie alle verwirrt durch Grenzfragen erhalten.

Ein guter Test dafür ist, wenn Sie einen Polygon von Null Bereich haben, wie es von Kanten von Punkt A nach Punkt B besteht und zu A zurück, sollte es keine Pixel leuchten. Ein weiterer Test ist, wenn man ein Parallelogramm haben, die 2 Einheiten hoch ist, und es ist oberen und unteren Kanten sind 2 Einheiten breit, sollte es genau 4 Pixel leuchten.

Wenn die Polygone nicht konvex ist, ist es ein wenig anders. Überall dort, wo eine Kante einer Rasterlinie kreuzt, schalten alle Pixel von dort bis zu einem gewissen willkürlich gewählte X, wie beispielsweise die linke Kante des „Screen“ koordinieren. Wenn Sie alle Kanten abgeschlossen haben, werden nur die Innenpixel eine ungerade Anzahl von Malen umgeschaltet worden sind.

ImageMagick von SVG nach PNG umwandeln kann, vielleicht können Sie einen Blick auf den Code nehmen oder einfach svg erstellen und IM verwenden für die Konvertierung? Scruffy das tut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top