Pregunta

¿Cómo tomo un conjunto de polígonos que contienen valores arbitrarios y creo un mapa de bits correspondiente donde cada píxel contiene el valor del polígono en esa ubicación?

Para poner la pregunta en contexto, mis polígonos contienen información sobre el número promedio de personas por kilómetro cuadrado dentro del polígono.Necesito crear un mapa de bits/ráster que contenga píxeles que representen la población en contenedores de 200 metros.

Hice algo similar en el pasado donde usé un polígono para crear una máscara dibujando en un mapa de bits y completando valores, y luego convirtiendo el mapa de bits en una matriz que puedo manipular.¡Estoy seguro de que hay un método mejor para hacer esto!

Estoy aclarando un poco más la pregunta según lo solicitado.

  1. Hay múltiples polígonos, cada polígono es un conjunto de vectores.
  2. Cada polígono tendrá un único valor único.
  3. Los polígonos no se superponen.

Gracias

Mella

¿Fue útil?

Solución

@Nick R.

Originalmente estaba usando ArcGIS 9.2, pero no funciona bien con C# y 64 bits, así que ahora estoy usando GDAL (http://www.gdal.org).

No gdal_rasterizar hacer exactamente lo que quieres?

Otros consejos

¿Qué software SIG estás utilizando?ArcGIS ofrece la herramienta Polygon to Raster en ArcGIS 9.2 o posterior, que se puede programar como la función PolygonToRaster_conversion.

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

Probablemente esto no sea lo que necesita, pero si desea dibujar un polígono (o, por el contrario, leer los píxeles de una imagen de polígono según el polígono), entonces una solución es crear el suyo propio. herramienta de relleno de polígono.Francamente, esto es muy divertido y realmente interesante de aprender.

Pero tu pregunta no me queda muy clara.¿Puedes dar una mejor descripción?

  • ¿Su conjunto de polígonos arbitrarios es imágenes reales, o puntos vectoriales (es decir, lista de puntos), o ???
  • ¿Cada polígono tiene un valor o cada polígono tiene una serie de valores que estás intentando dibujar?
  • Entonces, ¿cada polígono tiene una matriz asociada de valores de población con los que esencialmente desea texturizar el polígono?

-Adán

Es un proyecto divertido.Esto es lo que haría, suponiendo que los polígonos sean convexos:

 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

Esto es un poco más complicado de lo que parece, porque necesitas disciplina mental para pensar en las coordenadas ráster NO como los píxeles que se van a etiquetar, sino como las líneas invisibles ENTRE ellos.De lo contrario, las cuestiones de límites te confundirán.

Una buena prueba de esto es que si tienes un polígono de área cero, como si estuviera formado por bordes desde el punto A al punto B y de regreso a A, no debería iluminarse ningún píxel.Otra prueba es si tienes un paralelogramo que tiene 2 unidades de alto y sus bordes superior e inferior tienen 2 unidades de ancho, debería iluminarse exactamente 4 píxeles.

Si los polígonos NO son convexos, es un poco diferente.Dondequiera que un borde cruce una línea ráster, cambie todos los píxeles desde allí a alguna coordenada X elegida arbitrariamente, como el borde izquierdo de la "pantalla".Cuando hayas completado todos los bordes, sólo los píxeles interiores se habrán alternado un número impar de veces.

ImageMagick puede convertir de svg a png, ¿tal vez puedas echar un vistazo al código o simplemente crear svg y usar IM para la conversión? Desaliñado hace eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top