2. 转化¶
请注意,本页目前为草稿,有待进一步更新。
mappyfile解析映射文件并将其转换为抽象语法树(ast)。然后,映射文件转化器类将此树转换为python字典。这为Python开发人员提供了一个熟悉的数据结构,可以用来进一步编辑映射文件。
例如,使用下面的映射文件:
MAP
EXTENT -180 -90 180 90
NAME 'MyMap'
WEB
METADATA
'wms_enable_request' '*'
'wms_feature_info_mime_type' 'text/html'
END
END
PROJECTION
"init=epsg:4326"
END
LAYER
PROCESSING 'BANDS=1'
PROCESSING 'CONTOUR_ITEM=elevation'
PROCESSING 'CONTOUR_INTERVAL=20'
EXTENT -180 -90 180 90
NAME 'rgb'
TYPE RASTER
DATA '../data/raster/bluemarble.tif'
TEMPLATE 'raster.template.html'
END
END
以下代码可用于查看字典结构(此处表示为JSON对象):
import mappyfile
import json
mf = mappyfile.open("./docs/examples/after.map")
with open("./docs/examples/sample.json", "w") as f:
json.dump(mf, f, indent=4)
输出:
{
"__type__": "map",
"extent": [
-180,
-90,
180,
90
],
"name": "MyMap",
"web": {
"__type__": "web",
"metadata": {
"wms_enable_request": "*",
"wms_feature_info_mime_type": "text/html",
"__type__": "metadata"
}
},
"projection": [
"init=epsg:4326"
],
"layers": [
{
"__type__": "layer",
"processing": [
"BANDS=1",
"CONTOUR_ITEM=elevation",
"CONTOUR_INTERVAL=20"
],
"extent": [
-180,
-90,
180,
90
],
"name": "rgb",
"type": "RASTER",
"data": "../data/raster/bluemarble.tif",
"template": "raster.template.html"
}
]
}
以上注意事项:
在映射文件中可以有多个实例的对象将存储在列表中(顺序很重要)。
大多数对象都有一组键/值对。但是,
PROJECTION
它被视为一个列表(请参见http://www.mapserver.org/mapfile/projection.html)。一些键已被引用,例如 在
METADATA
对象中,例如 “wms_enable_request”是字符串而不是关键字。某些键在对象中重复。例如。
PROCESSING "BANDS=1" PROCESSING "CONTOUR_ITEM=elevation" PROCESSING "CONTOUR_INTERVAL=20"
这些被转化为列表:
"processing": [ "'BANDS=1'", "'CONTOUR_ITEM=elevation'", "'CONTOUR_INTERVAL=20'" ],
Python字典与json数据结构紧密相关,这意味着mapfile字典结构可以形式化为jsonschema。
2.1. 映射文件添加¶
为了确保在输入和输出映射文件时不会丢失任何信息,mappyfile使用隐藏属性来存储其他的数据。此数据不作为pprint的一部分输出。例如,隐藏属性用于存储同一类型的对象,例如图层、类、样式