Criando imagem simples a partir de dados vetoriais

14

Alguém pode sugerir uma maneira rápida (e de preferência de código aberto) de criar uma imagem a partir de um shapefile. Por exemplo, eu tenho um shapefile contendo limites de parcelas, quero criar um arquivo png que represente essas parcelas. A simbologia necessária para esta imagem será simples (contorno e preenchimento sólidos).

Eu sei que o shp2img do MapServer faria o truque. Estou curioso para saber se há mais alguma coisa disponível.

Todas as referências a ferramentas pré-compiladas ou api's / sdks são bem-vindas.

user890
fonte
Talvez essa pergunta possa ser intitulada "Criando imagem simples a partir de dados vetoriais (por exemplo, Shape)", para que seja uma pergunta mais genérica? Você ainda recebe sua resposta, mas há mais um incentivo para outras pessoas verem / responderem também. Eu também sugeriria alterar "e código aberto" para "preferencialmente código aberto" pelo mesmo motivo.
Mark Ireland
Bons pontos, edições aplicadas.
usar o seguinte comando

Respostas:

15

Você pode usar python (módulos: shapley , GDAL / OGR , numpy , matplotlib ) e GDAL / OGR para desenhar imagens de praticamente qualquer fonte de dados vetoriais, no seu caso, shapefile. Talvez isso ajude você.

Exemplo:

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
fonte
Exatamente o que eu precisava. Essa abordagem é especialmente útil, pois não está vinculada a fontes de dados de shapefile. Obrigado.
user890
6

Rápido, barato (e sujo):

  • abra e simbolize seu arquivo de forma com um qgis , udig , openjump ou qualquer outro GIS gratuito,
  • pressione o botão " imprimir tela ",
  • cole no gimp e salve como arquivo png.

Desvantagem: é claro que a resolução da imagem não pode ser mais fina que a da tela.

julien
fonte
3

O GeoTools http://geotools.org contém todos os bits necessários para isso, ficaria surpreso se alguém ainda não tiver o código em algum lugar para fazer isso.

Ian Turton
fonte
2

Eu acho que depende do que você quer dizer com rápido. Você quer dizer algo fácil de instalar ou algo fácil de usar depois de instalá-lo.

Você menciona o MapServer e o shp2img. Se você tiver o MapServer instalado, provavelmente poderá escrever um script MapScript (Python ou php) bastante simples que percorrerá uma pasta de shapefiles e renderizará imagens com a simbologia padrão.

DavidF
fonte