使用python进行 mapscript图像生成

作者

肖恩吉利斯

最后更新

2008/07/15

介绍

mapscript howto文档旨在用特定主题的用法示例来补充API引用。本文档中的所有示例都是指与MapServer 4.2+一起分发并在MapServer/Tests下找到的 Mapfile 和测试层。

伪码

所有示例都将使用与语言无关的API引用一致的伪代码。每行都是一个语句。对于对象属性和方法,我们使用点,'.'运算符。对象的创建和删除将用“new”和“del”关键字表示。除此之外,伪代码看起来很像Python。

图像概述

mapserver和mapscript最常用的用法是使用内置的gd格式驱动程序创建地图图像:gd/gif、gd/png、gd/png24和gd/jpeg。这些图像可以保存到磁盘上的文件中,或者直接传输到其他设备。

ImageObj类

图像在mapscript中由imageobj类表示。有关类属性和方法的详细信息,请参阅API引用(mapscript.txt)。

从mapobj创建imageobj

mapobj类有两个返回imageobj实例的方法:“draw”和“PrepareImage”。第一个返回一个完整的地图图像,就像从mapserv cgi程序中获得的一样

test_map = MapScript.mapObj('tests/test.map')
map_image = test_map.draw()

“PrepareImage”将生成一个大小合适、格式正确的空白图像,没有任何层、符号或标签。

blank_image = test_map.prepareImage()

创建新的ImageObj

ImageObj类构造函数创建新实例而不需要映射

format = MapScript.outputFormatObj('GD/JPEG')
image = MapScript.imageObj(300, 200, format)   # 300 wide, 200 high JPEG

甚至可以从磁盘上的文件初始化

# First three args are overridden by attributes of the disk image file
disk_image = MapScript.imageObj(-1, -1, NULL, 'tests/test.png')

图像输出

在磁盘上创建文件

使用“保存”方法将图像保存到磁盘。通过访问图像格式的“扩展名”属性,可以在不做任何假设的情况下使用正确的文件扩展名

filename = 'test.' + map_image.format.extension
map_image.save(filename)

如果图像使用基于gdal/gtiff的格式,则可以通过将mapobj作为第二个可选参数添加到“save”来在磁盘上创建geotiff文件。

map_image.save(filename, test_map)

直接输出

可以使用“write”方法将图像转储到打开的文件句柄。默认情况下,文件句柄为“stdout”

# Send an image to a web browser
print "Content-type: " + map_image.format.mimetype + "\n\n"
map_image.write()

对于所有的swig mapscript语言,此方法都不是完全正常的。有关详细信息,请参阅API参考(mapscript.txt)。“写入”方法是4.4中的新方法。

图像和符号

symbolobj::getimage()方法将返回pixmap符号的imageobj实例

symbol = test_map.symbolset.getSymbolByName('home-png')
image = symbol.getImage()

有一种对称的“setimage”方法将图像加载到符号中,允许动态创建pixmap符号

new_symbol = MapScript.symbolObj('from_image')
new_symbol.type = MapScript.MS_SYMBOL_PIXMAP
new_symbol.setImage(image)
index = test_map.symbolset.appendSymbol(new_symbol)

get/setimage方法在MapServer 4.4中是新的。