MapScript图像生成

作者

肖恩吉利斯

作者

赛斯·吉文

联系

Sethg在gegraph ika.co.uk网站上

最后更新

2021-05-22

介绍

MapScrip HOWTO文档旨在通过特定主题的用法示例来补充API参考。本文档中的所有示例都是指与MapServer一起分发并位于以下源代码管理中的Mapfile和Testing Layers Mapserver/tests

下面的示例是用Python语言编写的。所有MapScrip语言都使用相同的API,但需要使用相关语言的语法重写。

图像概述

MapServer和MapScript最常见的用法是使用内置格式驱动程序创建地图影像,例如 AGG/PNGAGG/JPEG ,以及 CAIRO/PNG 。该图像可以保存到磁盘上的文件中,也可以直接流到另一台设备上。

ImageObj类

图像在MapScrip中由 imageObj 班级。

从mapobj创建imageobj

这个 mapObj 类有两个方法,它们返回 imageObjmapObj.draw() ,以及 mapObj.prepareImage() 。第一个函数返回一个完整的地图图像,就像从mapserv CGI程序中获得的一样:

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

将生成大小适当且格式化的空白图像,不包含任何图层、符号或标签 mapObj.prepareImage()

blank_image = test_map.prepareImage()

创建新的ImageObj

ImageObj类构造函数无需映射即可创建新实例:

format = mapscript.outputFormatObj('AGG/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, None, 'tests/test.png')

图像输出

在磁盘上创建文件

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

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

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

map_image.save(filename, test_map)

直接输出

方法可以将图像转储到打开的文件句柄 mapObj.write() 方法。默认情况下,文件句柄为‘stdout’:

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

此方法并不完全适用于所有SWIG MapScrip语言。请参阅 SWIG API 有关详细信息,请参阅。

图像和符号

这个 symbolObj.getImage() 方法将返回 imageObj :对于像素图符号:

symbol = test_map.symbolset.getSymbolByName('home-png')
input_format = mapscript.outputFormatObj('AGG/PNG')
image = symbol.getImage(input_format)

有一个对称的 symbolObj.setImage() 将图像加载到元件中的方法,允许动态创建像素图元件:

new_symbol = mapscript.symbolObj('from_image')
new_symbol.type = mapscript.MS_SYMBOL_PIXMAP
new_symbol.setImage(image)
index = test_map.symbolset.appendSymbol(new_symbol)
test_map.symbolset.save('tests/output_symbols.txt')