Как мне генерировать эскизы изображений из множества шейп-файлов?


9

Мы с коллегой недавно выпустили проект с открытым исходным кодом Mapoteca, представляющий собой набор скриптов Python, который интегрируется с установкой GDAL / FWTools, позволяя осуществлять полный просмотр каталогов, ищущих пространственные данные и извлекающих экстент, геометрию, количество элементов, проекцию и пользователь записывает его в CSV-файл. Мы работаем над частью, которая описывает связанные файлы DBF, и мы хотели сгенерировать миниатюрное изображение каждого шейп-файла. Знаете ли вы, как генерировать эти миниатюры в jpeg или png с использованием Python?

Ответы:




2

Простейшим способом было бы вызвать gdal_rasterize с помощью subprocess.call (), но я подозреваю, что он не выполняет никакой интерполяции, поэтому он будет иметь псевдоним до нечеткости, если вы сгенерируете изображение размером с миниатюру прямо из данных. Таким образом, вы должны сгенерировать временное изображение «разумного размера» * и использовать библиотеку изображений Python, чтобы масштабировать его до нужного вам размера.

Но я ожидаю, что самая большая проблема будет заключаться в том, на каких атрибутах вы будете основывать свой стиль? Шейп-файлы не имеют встроенной отображаемой информации, так как я уверен, что вы знаете, поэтому вам нужно будет найти способ решить, какие цвета использовать. gdal_rasterize дает вам возможность сделать это, но выбор обычно основан на знании предметной области. Чтобы иметь общий инструмент, вам понадобится общая схема стилей.

* Это тоже то, для чего вам, возможно, придется сделать несколько жестко закодированных правил. Возможно, начните с идеального размера пикселя (скажем, 10 м на пиксель) и увеличьте его, если получающееся изображение слишком велико, чтобы быть практичным.



1

Просто ради полноты - mapserver также может отображать хорошо выглядящие карты из целого ряда базовых данных, используя командную строку с помощью утилиты shp2img . Опять же, вам нужно будет выбрать очень общий, очень простой стиль, который соответствует вашим целям.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.