Crear una imagen simple a partir de datos vectoriales

14

¿Alguien puede sugerir una forma rápida (y preferiblemente de código abierto) para crear una imagen a partir de un shapefile. Por ejemplo, tengo un archivo de forma que contiene límites de parcela, quiero crear un archivo png que represente estas parcelas. La simbología requerida para esta imagen será básica (contorno sólido y relleno).

Sé que shp2img de MapServer haría el truco. Tengo curiosidad por saber si hay algo más disponible.

Cualquier referencia a herramientas precompiladas o api / sdks son bienvenidas.

usuario890
fuente
¿Quizás esta pregunta podría retitularse "Crear una imagen simple a partir de datos vectoriales (por ejemplo, Forma)" para que sea una pregunta más genérica? Todavía obtienes tu respuesta, pero hay más incentivos para que otras personas también vean / respondan. También sugiero cambiar "y código abierto" a "preferiblemente código abierto" por la misma razón.
Mark Ireland, el
Buenos puntos, ediciones aplicadas.
user890

Respuestas:

15

Puede usar python (módulos: shapley , GDAL / OGR , numpy , matplotlib ) y GDAL / OGR para dibujar imágenes de casi cualquier fuente de datos vectoriales, en su caso shapefile. Quizás esto te ayude.

Ejemplo:

from shapely.geometry import Polygon
from shapely.wkb import loads
from osgeo import ogr
from matplotlib import pyplot

def drawPoligon(poligon,graf):
    xLista,yLista = poligon.exterior.xy
    graf.fill(xLista,yLista,"y")
    graf.plot(xLista,yLista, "k-")

fig = pyplot.figure(figsize=(4, 4),dpi=180)
ax = fig.add_subplot(111)
file1 = ogr.Open("d:\\temp02\\datafile.shp")

layer = file1.GetLayerByName("datafile")
parcel = layer.GetNextFeature()

while parcel is not None:
    geometryParcel = loads(parcel.GetGeometryRef().ExportToWkb())
    drawPoligon(geometryParcel , ax)
    parcel = layer.GetNextFeature()


pyplot.savefig('datafile.png')
Mario Miler
fuente
Exactamente lo que necesitaba. Este enfoque es especialmente útil ya que no está vinculado a las fuentes de datos del archivo de forma. Gracias.
user890
6

Rápido, barato (y sucio):

  • abra y simbolice su archivo de forma con un qgis , udig , openjump o cualquier otro SIG gratuito,
  • presione el botón " imprimir pantalla ",
  • pegar en gimp y guardar como archivo png.

Inconveniente: por supuesto, la resolución de la imagen no puede ser más fina que la de la pantalla.

julien
fuente
3

GeoTools http://geotools.org contiene todos los bits que necesita para hacer esto, me sorprendería si alguien no tiene el código en alguna parte para hacer esto.

Ian Turton
fuente
2

Supongo que depende de lo que quieras decir con rápido. ¿Te refieres a algo fácil de instalar o algo que es fácil de usar una vez que lo tienes instalado?

Menciona MapServer y shp2img. Si tiene instalado MapServer, probablemente podría escribir un script bastante simple de MapScript (Python o php) que recorriera una carpeta de archivos de forma y representara imágenes de ellos con la simbología predeterminada.

DavidF
fuente