Wie generiere ich Miniaturbilder aus vielen Shapefiles?

9

Ein Kollege und ich haben kürzlich ein Open Source-Projekt namens Mapoteca veröffentlicht , eine Reihe von Python-Skripten, die in eine GDAL / FWTools-Installation integriert sind und eine vollständige Durchsicht von Verzeichnissen ermöglichen, die nach räumlichen Daten suchen und Umfang, Geometrie, Anzahl der Elemente und Projektion extrahieren und Benutzer schreibt es in eine CSV-Datei. Wir arbeiten an dem Teil, der die zugeordneten DBF-Dateien beschreibt, und wir wollten ein Miniaturbild jedes Shapefiles erstellen. Kennen Sie eine Möglichkeit, diese Miniaturbilder in JPEG oder PNG mit Python zu generieren?

jdeltoro1973
quelle

Antworten:

3

Sie können Mapnik zum Rendern der Bilder integrieren.

Sean
quelle
3

Ich hatte eine Frage zum Erstellen von Bildern aus Vektordaten gestellt , die Sie möglicherweise nützlich finden. Die akzeptierte Antwort, die Kombination aus Shapely, Ogr, Matplotlib und Numpy, scheint für Sie gut zu funktionieren.

user890
quelle
2

Der einfachste Weg wäre, gdal_rasterize mit subprocess.call () aufzurufen, aber ich vermute, dass es keine Interpolation durchführt, sodass es einen Alias ​​bis zur Unleserlichkeit darstellt, wenn Sie ein Bild in Miniaturgröße direkt aus den Daten generieren. Sie sollten also ein temporäres Bild mit "angemessener Größe" * erstellen und es mithilfe der Python-Bildbibliothek auf die gewünschte Größe skalieren.

Aber ich gehe davon aus, dass das größte Problem darin besteht, auf welchen Attributen Sie Ihr Styling basieren werden. Shapefiles enthalten keine inhärenten Anzeigeinformationen, wie Sie sicher wissen. Daher müssen Sie einen Weg finden, um zu entscheiden, welche Farben verwendet werden sollen. Mit gdal_rasterize können Sie dies zwar tun, die Auswahl basiert jedoch normalerweise auf domänenspezifischem Wissen. Um ein generisches Tool zu haben, müssen Sie ein generisches Styling-Schema haben.

* Auch dies ist etwas, für das Sie möglicherweise ein paar fest codierte Regeln festlegen müssen. Beginnen Sie möglicherweise mit einer idealen Pixelgröße (z. B. 10 m pro Pixel) und erhöhen Sie diese, wenn das resultierende Bild zu groß ist, um praktisch zu sein.

MerseyViking
quelle
1

Der Vollständigkeit halber kann der Mapserver mit dem Dienstprogramm shp2img auch gut aussehende Maps aus einer Reihe von Basisdaten über die Befehlszeile rendern . Auch hier müssen Sie sich für einen sehr allgemeinen, sehr einfachen Stil entscheiden, der Ihren Zwecken entspricht.

relet
quelle