Создание простого изображения из векторных данных

14

Может кто-нибудь предложить быстрый (и желательно с открытым исходным кодом) способ создания изображения из шейп-файла. Например, у меня есть шейп-файл, содержащий границы участков, я хочу создать файл png с изображением этих участков. Символы, необходимые для этого изображения, будут голыми (сплошной контур и заливка).

Я знаю, что shp2img из MapServer поможет. Мне просто любопытно, есть ли что-нибудь еще доступное.

Любые ссылки на предварительно скомпилированные инструменты или API / SDK приветствуются.

user890
источник
Возможно, этот вопрос можно было бы переформулировать как «Создание простого изображения из векторных данных (например, формы)», так что это более общий вопрос? Вы все еще получаете свой ответ, но у других людей есть больше стимулов для просмотра / ответа. Я также предложил бы изменить «и с открытым исходным кодом» на «предпочтительно с открытым исходным кодом» по той же причине.
Марк Ирландия
Хорошие моменты, внесенные изменения.
user890

Ответы:

15

Вы можете использовать python (модули: shapley , GDAL / OGR , numpy , matplotlib ) и GDAL / OGR для рисования изображения практически из любого источника векторных данных, в вашем случае shapefile. Может быть, это поможет вам.

Пример:

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')
Марио Милер
источник
Именно то, что мне было нужно. Этот подход особенно полезен, поскольку он не привязан к источникам данных шейп-файлов. Благодарю.
user890
6

Быстро, дешево (и грязно):

  • открыть и символизировать ваш файл формы с помощью QGIS , UDIG , OpenJump или любой другой бесплатной ГИС,
  • нажмите кнопку « печать экрана »,
  • вставить в GIMP и сохранить в формате PNG.

Недостаток: конечно, разрешение изображения не может быть лучше, чем разрешение экрана.

жюльен
источник
3

GeoTools http://geotools.org содержит все, что вам нужно для этого, я был бы удивлен, если бы кто-то уже не имел кода где-то для этого.

Ян Тертон
источник
2

Я думаю, это зависит от того, что вы подразумеваете под быстрым. Вы имеете в виду что-то простое в установке или что-то простое в использовании после установки.

Вы упоминаете MapServer и shp2img. Если у вас установлен MapServer, вы, возможно, могли бы написать довольно простой скрипт MapScript (Python или php), который бы перебирал папку шейп-файлов и отображал изображения с символами по умолчанию.

DavidF
источник
1

На этот вопрос уже дан ответ, но я добавлю некоторую дополнительную информацию, так как она может быть полезна для кого-то. Этот список рассылки объясняет, как преобразовать SHP в изображения, и в настоящее время я работаю с ним, чтобы выполнить задачу: http://lists.osgeo.org/pipermail/qgis-user/2010-October/010239.html

Миколас Симутис
источник
0

Некоторое время назад я задокументировал это решение, используя два разных метода.

Тот, который использует чистый Python, который будет работать везде, где Python делает: http://geospatialpython.com/2010/12/rasterizing-shapefiles-2-pure-python.html

И еще один с использованием библиотеки изображений Python: http://geospatialpython.com/2010/12/rasterizing-shapefiles.html

GeospatialPython.com
источник